Пока только вот такое в голову пришло.
function replace_element_by_html(target, html)
{
var tmpNode = document.createElement('div');
tmpNode.innerHTML = html;
for (key in tmpNode.childNodes)
{
target.parentNode.insertBefore(tmpNode.childNodes[key].cloneNode(true), target);
}
target.parentNode.removeChild(target);
}
Не очень конечно с точки зрения производительности.