It’s pretty simple actually, and in the new KiCad version it works in the same way as footprints in Pcbnew already do. You get a symbol from a library, and when you use it, a copy of the library symbol is saved in the schematic itself. That is why it is easy in Pcbnew to jump to the footprint editor with [Ctrl + e] with a footprint, edit it, and put the modified footprint directly back into pcbnew.
It gives you the best of both worlds. You have the big libraries to get started, and can make small changes trivially simple without having to bother with library management if you don’t want that overhead.
The weird way actually is how KiCad V5.1.x works now:
In KiCad V5.1.x there is only a link for each schematic symbol into some library, and when that link gets broken you get the [??] schematic symbols. This happened quite often and as a stop gap measure the [projectname]-cache.lib was invented, which preserved a copy of the library symbols so they could be rebuild if needed. (The “resque” dialog at startup). This -cache.lib file was often not backed up because it simply got re-created from the original libraries if you delete it while working on a project, which suggested it was not such an important file. But if you shared the project with someone else or when you restore a backup from an old KiCad V4 project, to revise it in KiCad V5 (with other main symbol libraries) it was a real headache if this file was missing.
For me at least it’s quite common to make small changes to schematic symbols or footprints to suit particular needs for a project. One example was a footprint for a shielded RJ-45 connector. I had two next to each other, and they shared a hole for the shielding, so I deleted that hole from one of the footprints, and nudged the other a few tenths of a mm. I am also known to Re-arrange the order of the pins on schematic symbols exactly as Arcatus does.