It is an alpha-quality library, but I've been playing around with something like this, using ES2015 template strings: https://github.com/af/slashpile
I've yet to figure out if the run-time performance hit is reasonable, but I vastly prefer the syntax to either JSX or hyperscript (I previously wrote a hyperscript-like library as well, and have used it for several months)
If we want to go with the code route then the DOM as code is actually really clean with Coffeescript.
Elm is interesting but I don't like having to do [] (empty array) when there are no attributes or [] for the children when there are obviously no children (hr, br, img, etc).