As far as I know, the only method that uses relative movement is roff.
What you are trying to do could either be done with multiple scripts, like you said, or by using conditional statements (if-else) and a variable (or parm) to store the current elevator position.
I actually built a fully working three floor elevator, which allows you to first select the desired floor with one switch and then launch the elevator to that floor with another switch. Without stopping at possible floors between. That system could also be used for elevators with even more stops. However, it was pretty complicated and even just three floors required somewhat lenghty scripts.
Frozen by ICARUS