Wie mache ich das? Kann ich der Funktion SIGNAL (SIG_OVERFLOW0) {...} Parameter übergeben?
Du kannst einfach globale Variablen definieren:
volatile int Variablenname;
In die globale Variable kannst du dann z.B. schreiben welches Programm gerade laufen soll, Beschleunigen, Bremsen etc. und das in der ISR abfragen.

Q:Wie bringe ich das Programm dazu, dass es nach dem Bremsen aussteigt?
Du könntest den Interrupt-Enable für den Timer-Overflow löschen, dann springt er nicht mehr in die ISR. Soll dann ein neues Programm gestartet werden (z.B. Rückwärtslaufen) dann setzt du das Flag wieder.

Das Senden von Motordaten würde ich nicht in Interrupts machen. Ich würde das einfach in main() laufen lassen. Wenn du über RS232 sendest, dann musst du ja eh immer warten, bis der Buffer zum senden leer ist.

while (!(UCSRA & (1<<UDRE)));

Du kannst ja unmöglich in der ISR warten! Hoffe, ich konnte helfen.