We use a queue to queue up states for a seperate state machine. The event handler only adds states to the queue. I know that it sounds a little awkward, but it has many advantages since you can take things out of the queue or put things in the front of the queue. When it come right down to it, you can also interrupt what's happening in the state machine. This might be an architecture that you could use to re-order how things happen.
Rob