That's exactly it. Each object (and by object I mean not only game objects, but any entity that takes part in the functioning of the program) gets a chance to update its state, taking into consideration whatever data it deems necessary (i.e. some objects observe the states of other objects in order to make their decisions). Really, it's all just about computing the next step.
Getting that right makes me feel better. In theory then, if I ran SMB instruction by instruction, I should see each object move one at a time, right?
The next question then is how things are organized so that the game doesn't go fast when there's few objects on screen, and then slow when there's many, but instead at a constant rate. I suppose that one counts cycles, and makes sure that the cycles always add up to a certain number? This must be tricky to do when branching is included. Do modern games do something different?, because this seems awfully complicated.
And how does one choose what number to count to? Too low and the game's too fast, too high and the game's too slow, but the number must still be high enough for the whole update loop to run.