Stepper motor, do new commands override old ones before they are complete?

Which stepper library do you use?

If you use the built-in step() function then you’ll see that the doc states

This function is blocking; that is, it will wait until the motor has finished moving to pass control to the next line in your sketch. For example, if you set the speed to, say, 1 RPM and called step(100) on a 100-step motor, this function would take a full minute to run. For better control, keep the speed high and only go a few steps with each call to step().

so in that case the answer to your question is yes it will finish the 10 before doing the -5, it will actually finish the 10 without giving a chance for your code to run anything else if you called myStepper.step(10);

If you have a loop() doing just single steps, then your code controls what happens by testing conditions and it’s up to you to interrupt the current flow to do something else

If you use AccelStepper then you can use API functions that never delay() or block. See how move(), moveTo() and run() work