This is a pretty standard multithreading problem that has nothing to do with mutability or immutability.
- Unit1 kills unit2
- Unit2 kills unit1
If you double buffer your actions properly, both unit will be dead at frame N+1. If however you modify your data in place, this may happen: 1. Unit1 kills unit2 => delete unit 2
2. Unit2 no longer exists. Unit1 lives.
Or, this may happen: 1. Unit2 kills unit1 => delete unit1
2. Unit1 no longer exists. Oops.
Oops.What definitely does not happen is the double kill. StarcraftII can live with that, but other games, like Frozen Synapse, would be broken.
In that case you take all the attacks, computes the damages, apply them and prune the dead.