I think they do this so you can't have 2 units end their turn on the same tile. Lets say your warrior ended his turn in the city. When you buy a unit that newly purchased unit won't be able to move and the your warrior who ended his turn in the city can't move. So you wind up with a stack. When you build a unit both units have movement points available because units are built before any unit can move.
However this problem could be easily solved by only not allowing to purchase units in a city where the garrisoned unit doesn't have any movement points left. Theoretically this could still cause problems if the garrisoned unit has movement points, but can't move because the city is surrounded so you'd still be stuck with a stack somewhere.
This mechanic is annoying and I bet it was put in to solve lazy programming.
You just spent you whole post explaining why the mechanic was necessary and could not be avoided, then somehow draw the conclusion it was a lazy programming hack. Huh?