Собираем и вставляем разметку:
// заменяем содержимое элемента main
main.innerHTML = arr.reduceRight(
(content, tag) => `<${tag}>${content}</${tag}>`,
''
);
// или, дополняем его
main.insertAdjacentHTML(
'beforeend',
(function next(i, tag = arr[i] ?? '') {
return tag && `<${tag}>${next(-~i)}</${tag}>`;
})(0)
);
Или создаём элементы напрямую:
// замена контента
main.replaceChildren(...arr.reduceRight((content, tag) => {
const el = document.createElement(tag);
el.append(...content);
return [ el ];
}, []));
// или, добавление
arr.reduce((el, tag) => (
el.appendChild(document.createElement(tag)),
el.lastChild
), main);