It's not an only html solution, but I'm fond of using nginx server side v includes, which with a little setup let's you do things
<--# set var="browser-title" value="Colophon" -->
<--# set var="page-title" value="oink" -->
<--# include file="/stubs/header.shtml" -->
You can do simple things like set variables and import reusable html templates. And since nginx is commonly used as the webserver or proxy you kind of get this functionality "for free."
PS generating html by hand isn't that bad though. You can either script it yourself or just have your own manual template html file that you base everything on, and/or use something like emmet/emmet-vim