While everything has its tradeoffs, we went with this approach because:
- Our app has a lot of animation and interactivity capabilities not meaningfully expressed through anything but JavaScript. For example, we don't use CSS3 Animations nor transitions because they aren't powerful enough (pausing, synchronization, etc.).
- We have better control over how we express the DOM to the browser. There's plenty of browser bugs or incompatibilities which sometimes require us to on-the-fly change the DOM structure or which properties we are using.
- The user could easily bork the output so it could not be read back in
- No tool will ever produce output that will appease everyone :)
We provide lots of hooks in and outside of the runtime for your own JavaScript and HTML so you can still customize quite a bit.
So it isn't that our output isn't very clean (in fact I'm quite proud of the runtime and how we've been able to add features without increasing bloat); it is that edits are meant to happen from the app itself.