This seems kind of extreme. It's also unnecessary. As long as the data relates to the state machine then it's valid to keep it in a local shift register. It also makes it clear to the observer, what design pattern you're using (don't tell me, you don't care about other people looking at your code right?). Using functional globals and file IO within the same VI to pass data feels like you're using the wrong tool for the job at hand. I don't see the benefits.
Let me make this clear. I'm specifically focusing on data that is only valid in the context of the current state machine