The updater is a program that checks whether your installation matches with the "repository", that is, a remote "installation folder" on the server, it works pretty much like versioning software (in fact its functionality comes pretty close in some regards). The things that don't match are made to match. Voilá. There's nothing 'magic' about core changes so that you can't make an update out of them by replacing the respective files with the new ones, deleting those that become obsolete and creating those that are new.
When all the assets change around a lot (lots of new code, a lot of new data like textures etc.) the return for patching diminishes, that is, you don't save a lot of transfer volume by keeping the stuff that did not change, but it can be done this way nonetheless.