Hallo Uwe,
ich bin gerade auf einer anderen Baustelle unterwegs, deshalb etwas pauschal:
Ich finde, das etwas erst dann unübersichtlich wird, wenn man Funktionalität nicht kapselt.
Deshalb versuche ich immer jede einzelne Funktionalität weiter zu gliedern bis sich nichts mehr aufteilen lässt (Top-down).
Dabei kümmere ich mich nie um benötigte Rechenzeit und Programmgröße (benötigte Zeilenanzahl).
Wichtiger ist für mich die Übersichtlichkeit und Debug-Möglichkeit.
Dann teste ich die einzelnen Module hinsichtlich ihrer Randbedingungen und anschließend die Funktionalität des aufrufenden Moduls.
Erst wenn alles (? ;-) ) so funktioniert, wie ich es erwarte, kümmere ich mich, wenn überhaupt notwendig, um die Optimierung der Rechenzeit.
Das mache ich dann durch den Einsatz meiner Profiling Class:
Speed, Speed, Speed - JavaScript Profiling Class Dann packe so etwas in eine Fehlerbehandlungsroutine und löse das Problem erst wenn eine konkrete Anforderung besteht.
Aber eine venünftige Fehlerbehandlung für erkannte, aber nicht behandelte Fälle, sollte es schon geben.
Was Deine anderen Vorschläge angeht, ich habe, glaube ich, fast alle Wege schon in Einzelfällen genutzt.
Bei einmalig genutzten Speziallösungen zählt nur das Ergebnis. ;-)