Functional programs handle state very well, but require a different way of looking at it.  For your position example, one thing to consider is having your position be a function of time instead of a fixed value.  This works well for particles following a fixed mathematical path, but you require a different strategy for handling a change in the path, such as after a collision.

The basic strategy here is you create functions that take in a state and return the new state.  So a particle simulator would be a function that takes a `Set` of particles as input and returns a new `Set` of particles after a time step.  Then you just repeatedly call that function with its input set to its previous result.