Thanks for the great response, hplus0603. I didn't think about fast-forwarding mechanism. That would make it easier for testing, too.
Just thinking out loud here:
What about in games like Travian? Consider the following the scenario. There are three players (P1, P2, P3). P1 is on vacation and is logged off all the time. P2 comes online, looks at P1's village, and decided to attack. It takes 4 hours for P2's army to arrive. P2 clicked on the attack button, thus initiating the attack, and logged off and went to sleep. P3 then came along, looked at P1's village, and also decided to attack. It takes 2 hours for P3's army to arrive. P3 also initiated the attack, and logged off.
So, the sequence looks like this
t0 - P2 decides to attack. Army will arrive at t4
t1 - P3 decides to attack. Army will arrive at t3
t2 - Nothing happens
t3 - P3 army arrived, damage is calculated.
t4 - P2 army arrived, damage is calculated (but this should already take the P3's attack into account).
It seems that this too can also be simulated.
So you would have the storage that represents the current state of the player, along with all the list of actions of what's going to happen in the future. And, whenever any player is interested in the state of that player, server will then process all the actions in the list according to their time, and apply the result as the current state of the player.
Would this cause synchronization issue since each player has its own timing frame? Imagine an inactive player that's never been checked. His time would be so behind of everyone else's.