Wie zeitliche Abläufe ohne delay() einfach gestalten?

Wenn ... ich den Endschalter ... betätige, dann läuft die Funktion immer noch weiter

ja klar, das hast du so programmiert:

...
   if (endlageValue==0)
    {
         ....
    }   // if (endlageValue==0)
  } //   if (modus == 1)
} // loop-Ende

-- Was soll er machen, wenn der Endlage-Schalter erreicht ist ?
-- Und wo würdest du das einbauen ?

2 Fragen, die du selbst beantworten musst, bzw. können solltest .

Falls es dir zur 2. Frage hilft:
if (bedingung) { ... } gibt es auch als if (bedingng) { ... } else { ... }