In the simplest way, not unlike Windows Update: snapshot filesystem, start filesystem transaction, unzip changed binary files, check new files integrity, end transaction.
Indeed, Apple used to distribute patches this way in the past.
You also could ship a list of updated system files hashes, compare to the installed files and just download the changed ones, like rsync.
Better than shipping a whole new disk image every small update they do.
Yeah, I'm sure it's theoretically doable, but it's one of those things which would almost certainly require substantial work given the massively complex edifice of iOS. (And the iOS IPSW format, or even iOS DMGs/ADIs, are very different from the OS X patches you mentioned.)
It's cheaper to make things that aren't maintainable. We optimize for the dev, not the platform or the user.
It's the same lazy dev culture that gives us Electron apps, or the lazy sysadmin culture that gives us docker.
It's cheaper to create massive incomprehensible and unmaintainable edifice that requires massive storage / processor / network inefficiency to maintain versus well thought-out and "clever" systems that work efficiently.
Personally, I wish the days of optimizing for low-resource machines, slow network connections, and expensive storage weren't gone. As an end-user I think the results of moving away from a culture of optimization haven't been good. I think the ship has sailed, though.
Indeed, Apple used to distribute patches this way in the past.
You also could ship a list of updated system files hashes, compare to the installed files and just download the changed ones, like rsync.
Better than shipping a whole new disk image every small update they do.