Beim ersten Programm ist der Fall klar:
Wenn gedrückt, einschalten-soweit richtig.
Aber wenn nicht gedrückt: ausschalten?
Klar geht sie sofort aus wenn du den Taster los lässt.
Zumindest sollte der laufende Timer dort mit rein, ungefähr so:

if(taster_losgelassen && timer_abgelaufen)
{
machsLichtAus;
}