Hallo,
was du machst klingt für mich stark nach dem Ansatz, den react.js verfolgt. Warum wechselst du nicht einfach dahin?
Der wesentliche Unterschied ist, dass das Template auf client-seite gehalten wird statt im Server zu liegen - da du aber sowieso noch behaviour binden musst (deine Event-Listener) ist der Code eh abhängig vom Template. Auf dieses Feature (dynamische Templates) würde ich im Zweifel eher verzichten. Nicht, dass es mit react unmöglich wäre - nur ungewöhnlich.
Ansonsten: zu deiner Frage 1: ja, Template und Daten an einer Stelle zu halten ist nicht unüblich. Meist sind die JS-Frameworks Komponenten-basiert. Das, was du beschreibst, wird darin üblicherweise Controller genannt.
Frage 2: die Idee ist es meistens, einen zentralen Datenservice zu haben, auf den die Controller referenzieren. Entweder, weil die Controller nur Referenzen nutzen oder in dem du die Controller als Event-Listener auf Updates beim Daten-Service einträgst. Gibt noch andere Methoden, aber das wären zumindest bei weitverteilten Komponenten (also insb. nicht welche in Kind-/Eltern-Beziehungen) üblich. Andere Methoden sind über Event-Listening/-Publishing (würde ich meist von abraten) oder über Attribute (wenn du einen Ansatz machst, in dem die Kind-Komponenten als WebComponents [wie bei react.js, angular sind die Komponenten neue HTML-Elemente] einbindest.
Viele Grüße Matti