innerHTML - это innerHTML, оп парсится браузером, а нормальный браузер видя незакрытый тег сам его закрывает за неряхой.)
Если вы последовательно составляете строку, то составляйте её не выводя.
Пример: не правильно
*!*
el.innerHTML = '<a>';
el.innerHTML += 'bla bla bla';
el.innerHTML += '</a>';*/!*
Пример: правильно
text = '<a>';
text += 'bla bla bla';
el.innerHTML=text+'</a>';
Есть ещё один вариант, но он возможен
только во время загрузки страницы и
не будет работать как реакция на действия пользоваться, поскольку разбирается браузером сразу по ходу загрузки совместно с обычным html.
Пример: в особом случае
document.write('<a>');
document.write('bla bla bla');
document.write('</a>');