Перебираем массив от конца к началу:
main.innerHTML = arr.reduceRight((content, tag) => `<${tag}>${content}</${tag}>`, '');
// или
main.append(arr.reduceRight((content, tag) => {
const el = document.createElement(tag);
el.append(content);
return el;
}, ''));
И наоборот:
main.insertAdjacentHTML('beforeend', (function next(i) {
return arr[i] ? `<${arr[i]}>${next(-~i)}</${arr[i]}>` : '';
})(0));
// или
arr.forEach(function(tag) {
this[0].appendChild(document.createElement(tag));
this[0] = this[0].lastChild;
}, [ main ]);