Ein paar erste Gedanken dazu:
Warum mischt Du immer noch Winkel und Step Angaben und absolute und relaive Positionierung? Ich sehe da eigentlich keinen Grund für. Relative Angaben machen Sinn nach dem Start und vor der ersten Referenzierung ( im Setup - da kann man dann auch während der Fahrt blockierend arbeiten und braucht keinen Zustandsautomaten ). Danach kannst Du immer absolut fahren - auch wenn Du immer bis Schalter hochfährst und den Referenzpunkt immer wieder neu setzt.
Es macht es übersichtlicher wenn Du da einheitlich vorgehst.
stepLift.attachEnable(enaPin, 100, HIGH); // Stepper werden ausgeschaltet.
Serial.println("SchrittmotorAUS");
Schmeiß die attachEnables aus der Schrittkette raus. So funktioniert das nicht. Das Ausschalten des Steppers macht die Lib automatisch, nachdem Du das attachEnable einmal im Setup aufgerufen hast ( hatte ich dir schon mehrfach geschrieben ... )
Dann macht es Sinn, da einen eigenen Startzustand zu haben ( IDLE oder RUHEZUSSTAND ). Nach einer ersten Referenzierung im Setup startet er mit diesem Zustand, und macht erstmal nichts. Beendet werden könnte das ganze dann wieder mit einem Fahren in den Ruhezustand ( Referenzierung ). Oder Du lässt es so wie es ist, startest mit der Referenzierung im loop() und brauchst dann gar keine Referenzierung im Setup mehr. Fügst dann aber nach der Referenzierung noch den IDLE Zustand ein in dem er erstmal auf den Sensor wartet. Das finde Ich übersichtlicher und der Zustandsname IDLE oder RUHEZUSTAND ( oder was dir gefällt
) sagt dann eindeutig aus, wo der Zustandsautomat im Ruhezustand stehenbleibt.