With the magic of indirect addressing, one can use an integer value representing the step number and use it as the indirect address of the bit in the bit word. Then we can have the best of both worlds...
N7:0 = step number
B3/[N7:0] = bit
A big disadvantage of using 4 bit binary to represent the 16 steps is that those bits are more difficult to keep straight when they are used to drive output rungs. It's pretty easy to use a 'step 4 bit' or 'step 5 bit' to turn on an output--there's only one bit on at a time. It's not so intuitive to have 'bits 0 and 2 only' (step 5) or 'bit 2 only' (step 4) to turn on an output. You have to check the states of all the bits to verify the current step.
Well, in the case of the integer representing states, you'd ikely want to use an EQU to check the state. You don't actually need to know what the binary representation was unless you wanted to do something else. If you were controlling multiple output states that weren't mutually exclusive (so you could have state 1 and state 3 on at the time time) you could use one MOV command to set both those bits at once by MOVing the number 5 (0101 binary) into the memory. Of course, this can get hairy if you have a bunch of states that need to be able to run simultaneously (which also moves even farther away from the idea of controlling something using a collection of mutually exclusive states)
In any case, there are lots of ways of controlling things like this. Computer programmers do this sort of thing all the time. They call a variable whose various bits mean different things a flag variable, and each bit a flag. Lots of times they'll have variables called certain things that are defined as having 1 partcular bit set on (so one might be 0001, the next, 0010, etc. corrosponding with 1, 2, 4, 8, etc.) and use an or command to combine them when they set the variable. (since 0001 OR 0010 = 0011)
Anyway, I could probably go on for a long time on this sort of thing (being a hobbyist compuer programmer certainly helps with this sort of thing.)
All in all, I think I would suggest that anyone who is seriously interested in PLC programming should learn the basics of computer programming as well. It provides a different ways to look at things, and probably makes it easier to understand some clever tricks you can do on PLCs.