And no, putting up a ZIP of every change and requiring users to piece together all the ZIPs to get the latest update is not realistic would be a support nightmare.
Of course they don't piece together the latest version from a variety of zips.
Users only need to get 1 zip with the latest version of the game.
You can save on bandwidth by having a universal patch, users install on top of their v1.0 downloadable, this raises the zip count to 2. (with newer universal patches replacing older ones) but it does take a little more effort on the developer's part in creating the universal patch (compare a directory containing latest version and v1.00 release of the game).
The main drawback of the 1 zip method is bandwidth efficiency, which might or might not be a big deal depending on the size of your game and how often you release patches.
Also, if we want to go from the hypothetical to the actual. The vast majority of the 1 zip implementations I have seen are self extracting zips. Updates are released in the form of a new self extracting zip containing the whole game. So its all down to bandwidth efficiency, which admittedly is a bigger deal for you guys since your games weigh in the gigabyes.
Valve only takes 30% if it's purchased on Steam. But by "requiring" Steam to download the game, we can manage all the channels (including direct sales where Valve gets 0) using Steam Pipe. Putting everything else aside, that one feature is enough to justify requiring Steam for most ISVs.