Simulate walking with collisions
J, 60 58 50 47 bytes
[:+/(*1,:1-(1&lt;1#.+/=/+/)+{.(~:*[=i.{_,~])+/)^:_

Try it online!
Takes input as a matrix of complex numbers -- starting positions in the 1st row, steps to walk in the 2nd row.
Passes all test cases including those suggested by tsh and the cycle of 4 suggested by xnor.
tldr how
We iteratively adjust the steps to be 0 for impossible moves (same destination (1&lt;1#.+/=/+/) or + swaps {.(~:*[=i.{_,~])+/) until they reach a fixed point ^:_.  Iteration is needed because some steps only become illegal after a walker changes from someone who will move to someone standing still.  There's a chain reaction.
After that iteration, impossible steps will have been converted to 0, and legal steps will remain what they were.
Once that's done, we just add those steps to the starting positions [:+/.