Writing apps across several processes with separate heaps and only connected via message passing will always have its challenges. In Angular 2 we are trying to address it by moving your entire application to the worker (components, directives, DI). This has several advantages:
- you do not need to break up your app into several processes that communicate via message passing making it one cohesive app (if that's what you meant by "cohesive")
- the worker code can still run on the main thread which makes it easy to debug (you can even run it on a localhost server and debug in WebStorm or debug simultaneously in multiple browsers)
A disadvantage, of course, is that you don't have direct access to the DOM API. For that you still need to do message passing. Alternatively, you can use custom elements (e.g. polymer) that run on the main process (and have DOM access), and have your angular app communicate with them via normal @Input/@Output template bindings.
I admit, I do not fully understand your point about manual changes and js compilation. As for worker APIs, it should be easy to call into it via dart:js, but I'm not sure if dart:js works in Dartium inside isolates. dart2js probably works. Worst case, you can talk to the UI process via messages and have a piece of code there access browser API. Curious, which web worker API would you like access to that you do not have today?