Ich bin nicht der Held was C angeht; ich programmiere lieber gleich in Assembler, also kann es sein, daß ich das eine oder andere falsch verstehe. Ich versuche Dir trotzdem mal zu helfen:

Wenn ich jedoch das sei(); weglasse, blinkt zumindest die LED
Also sowohl Deine beiden Interruptroutinen als auch die Hauptschleife manipulieren am Status der LED. Ohne SEI sind die Interrupts wirkungslos und nur noch Dein Hauptprogramm kontrolliert die LED. So läßt sich natürlich nicht herausfinden, welcher IRQ arbeitet und wer was macht.

Mein Vorschlag ist:
Lege das obige Programm beiseite und führe folgende Schritte durch:
Baue das einfachst mögliche Programm um die LED von Timer0-IRQ aus blinken zu lassen (Portinit, Timerinit, Deklaration der Interruptroutine, leere Schleife nach Inits und SEI). Sobald Deine LED blinkt, weißt Du was für Timer0 zu tun ist. Das Ganze wiederholst Du für Timer1, bis Du es auch dort hinbekommen hast. Wenn Du magst, kannst Du ja dann noch versuchen beides zu kombinieren: Timer0 schaltet die LED ein, Timer1 schaltet sie wieder aus - beide laufen mit leicht unterschiedlicher Frequenz, so das Du es auch blinken siehst. Dann sollte es möglich sein das obige Programm zu kontrollieren und zur Funktion zu bewegen - wenn der Fehler nicht ganz wo anders liegt.

Wird der Stack eigentlich vom Compiler verwaltet, oder muß der Stackpointer auch initialisiert werden?

Die Bezeichnungen der IRQ-Vektoren würde ich im interrupt.h vermuten. Wie erzeugt eigentlich delay.h die Verzögerung? Wenn der einen Timer verwendet, dann stört er Dich damit ganz gewaltig...