Modeling the elevator as a finite state machine
Obviously there are many many ways to design this, here is one possible approach.

For any design, the signals are no less critical than the control logic in the design process. For example, there are opposite suggestions of assigning states to represent the position (which floor) of the elevator and of not assigning. My take is, there should be signals telling where the elevator is anyway, so might as well define the signals to indicate the position. It seems that should be the simpler and more robust way.

So now the elevator movement state machine would probably have at least the following state: idle, up, down, stop. The input signals would be at least the current position and current destination. The current position is the signal that is build into the elevator mechanism, as discussed in the previous paragraph. By saying that current destination is an (internal) input signal is yet another design choice -- to partition the control logic. For more realistic modeling, additional states of elevator movement, such as decelerating, accelerating, door opening ... , could be added here.

To generate the current destination (signal), it could be something comprehensive based on some kind of queuing mechanism. Or it could be a much simpler state machine driven by some priority choices with no queuing. The priority choice of keep going in one direction until there is no more pending request in that direction (as suggested by supercat) can be one of the key choice. In my mind, this machine would have 7 states, one for each possible destination floor, plus a few more. Among the inputs to this would be the request signals from the buttons.

The request signals for the buttons are probably going to be generated by simple state machines. 19 state machines for the 19 inputs as you mentioned in EDIT 1. The state machines for buttons inside elevator would be somewhat like: When Idle if button pressed go to Request; When Request if Stop &amp;&amp; Current_position==Button_location goto Idle. The directional buttons on each floor would be slightly more complicated.