Ich denke schon, dass es geht.
Am besten packst du z.B. trpm in nen eigenes Unterprogramm, und rufst das dann bei Bedarf auf:

void drehZahl(float a,b,c,d)
{
stepper[stepper_VL].setRPM(a);
stepper[stepper_HL].setRPM(b);
stepper[stepper_HR].setRPM(c);
stepper[stepper_VR].setRPM(d);
}

An das Unterprogramm schickst du dann einfach die gewünschten Werte:

drehZahl(12.2, 17.45, 12.92, 14);

Vermutlich musst du das dann jedes Mal vor run() aufrufen, bzw. dann, wenn sich da Änderungen ergeben.
Was deine verlorenen Schritte angeht: kann es sein, dass das Programm einfach zu schnell läuft, so dass die Motoren einfach nicht nachkommen?
Das Problem hat man bei Servos ja auch, wenn man zu oft neue Positionen schickt, erreichen sie manche gar nicht.
Das kannst du mit isDone() offenbar überprüfen.