To answer one of your original questions, I would have a simple rung with S400 and S500 in parallel with each other - turning on the output. To me, basic state logic says that the outputs are on for certain states and off for all others. So if the machine is in S400 or S500, I would ALWAYS expect the output to be on.
You mention that S500 is just a continuation of S400 - keeping the output on. If so, simple parallel logic accomplishes that. However, if you are saying that you could somehow get to S500 without going through S400 first, and in this case, you would not want to turn on the output, then I totally agree with another poster to say that you have just defined a new state.
On other topics, many people program state logic with an integer that they set to 10, 20, 30.... The benefit of this approach for the programmer is that you can easily add extra steps between these steps if you realize the need. What I hate about that style is that the rest of the program usually has EQUAL statements in the logic. If State=20 then.... The problem in ladder logic (at least AB) is that there is nothing that easily tells the troubleshooter what State=20 means. So it works OK for the programmer who knows what state 20 and state 30 are, but for everyone that follows, its an investigation with guesswork. If you are lucky, the programmer added some rung comments to help you, but I'd rather see bit descriptions.
So I prefer your approach to using the bits of an integer where those bits are easily labelled. FYI, when I use that method, move a zero into the state Integer (to clear all bits to zero) and follow the Move command with a latch that sets the proper bit.