experience tells me the closer you stay to html the better. ZenCoding + LESS should sufficiently lower code generation. Abstraction layers over html tend to introduce a lot of hussle with premise of easier maintainably ( tried haml and many others, hardly added anything to the table)

Depends on a) how comfortable you are working with HTML to begin with, b) what functionality you're implementing with your DSL, and c) how many people are working on the project? If you're someone with a lot of Python experience and no HTML experience, and you're doing a solo project, this is a perfectly appropriate.

One other area where abstraction is appropriate is form generation. I've used Django a lot and recently Clojure+Noir a bit, and in both of those I've ended up using an abstraction for all the form code (Django forms in the former, Hiccup+helpers in the latter). In the Clojure project I was even working with someone knew HTML and not Clojure, so most of the site is rendered using Mustache templates, but I ended up rewriting all the forms in Hiccup because it's just easier to work with.

All that said, you seem like someone that might like Enlive (https://github.com/cgrand/enlive). I'm not sure if equivalents exist in other languages, but the gist of using it for templating is that you write a plain HTML file, and run the text through Enlive along with some transforms (identified by CSS-style selectors). I've never used it for anything major, but other people have, and it seems really cool.