Вот в таких ситуациях я понимаю, зачем придумали VueJS )).
Если серьезно, то чтобы решить задачу в рамках существующего стека, то где-то тут нужно прервать поток выполнения JS функцией setTimeout с нулевым временем ожидания, и продолжить работать с инпутами внутри вызываемой функции setTimeout. Это позволит передать управление браузеру, чтобы он успел отрисовать то, что закинуто в DOM через innerHTML:
if (code[i] == nameBlock) {
currentBlock.innerHTML = callback();
setTimeout(function(currentBlock, inputs)
{
for (var j = 0; j < currentBlock.querySelectorAll('input').length; j++) inputs.push(currentBlock.querySelectorAll('input')[j].getAttribute('name'));
callback(null, null, inputs);
}, 0, // нулевое время setTimeout
currentBlock, inputs // проверьте, чтобы правильно передавались аргументы внутрь setTimeout
);
break; // тут, наверное, можно прерывать внешний цикл, раз нашли нужное
}