Where are footprints and symbols stored?

Are footprints and symbols copied from libraries and stored in the project files?
So when updating a library, the changes will not automatically been copied?

Correct.

PCBNew and EEschema 6 store the copies in the .kicad_pcb and .kicad_sch files.

PCBNew 5 did the same, but EEschema 5 stored them in a separate file (but still part of the project).

Yes. The philosophy of the devs (I’m not a dev, but they’ve repeated this enough for it to sink into my addled little brain) is that KiCad should not automagically do anything, especially something that might break existing designs. For example, if the designer has used a footprint in a board that just fits in its location, but for future designs the designer wants to make certain features of the footprint a little larger for soldering and/or placement optimizations for all future designs. If the first design automatically updated the used footprint to what is in the library the next time it is opened potential clearance issues may appear on that board without warning. According to the KiCad dev’s philosophy this is a Bad Thing™.

The [Project]-cache.lib file (which stored the graphics for schematic symbols in KiCad V5) was an improvement over KiCad V4, but only marginally. Quite a lot of people did not know exactly what it was for, and deleting the file apparently did not break a project, which made many people believe this cache file was not very important. Result was that this file was often not added to git repositories, or backed up or manually deleted.

The result is that there are now quite a lot of (open sourced) projects on github, but with horribly broken schematics, because both the cache files are not archived, and the original libraries are no longer installed.

In KiCad V6 this is all (finally) past tense, as it stores this information in the schematic file itself.

A simple (non hierarchical) schematic made in KiCad V6 can pretty much be distributed as a single file, and the same for a .kicad_pcb