ElementTree может создавать HTML с некоторыми ограничениями. Я бы написал так:
from xml.etree.ElementTree import ElementTree, Element, SubElement
import sys
html = Element('html')
head = SubElement(html, 'head')
style = SubElement(head, 'link')
style.attrib = {'rel': 'stylesheet', 'href': 'style.css', 'type': 'text/css'}
body = SubElement(html, 'body')
para = SubElement(body, 'p')
para.text = 'Lorem ipsum sit amet'
doc = ElementTree(html)
doc.write(sys.stdout)
В случае умеренно сложного html я бы использовал какой-нибудь шаблонизатор: Jinja2, Mako, Cheetah, просто назвать несколько.