The upgrading process, without opening files and going into great detail, keeps track of which step is has done. The db_version stored needs to match the one on the _application.php file, else it tells you to upgrade. Each step of the way it stores "where we are at" then moves on to the next step. This way if you are on db_version 4 and need to get to 12 (for example) it'll store 5 and 6 and 7 and WHOOPS- crash. Now the database knows it did up to 7, so we are better able to attempt a recovery.
Anyway the zero issue was a comparison of what it was, what it currently is, and what it needs to be. If memory serves me, the problem was/is that we didn't actually store a zero. Or something like that. Two solutions in my head back then were (a) go back in time and release with a 1 instead of 0, or (b) hammer at that damned "0 not 4" issue until it stopped showing up. (b) sounded easier, but it never made it to core. Instead we still have a bug that was known about a long long time ago.