An update mostly consists of a set of binaries (EXE and DLL), where the source code is only slightly changed compared to the previously shipped version.
With the process they did up to now, they shipped all altered files as a whole in an update, likely zipped, but not being based on the previous binaries.
When changing the source a little (fixing a bug, adding some functionality), the binary (DLL, EXE) changes a lot, because if one function gets slightly longer due to an added check, all following functions are moved a little to make room. As any caller references the function by address, many code places change for each moved method.
Tools like bsdiff and courgette anaylze the old and the new binary, and can encode very efficiently what has moved and where references have to be updated.
A Chromium update, where a 10MB DLL has changed (and MS would have shipped the whole file, maybe compressed to 6MB), can be encoded using courgette into a 0.08MB differential update.