innerHTML можно использовать без проблем. Более того, на массивных операциях это позволяет увеличить производительность. Вот только не нужно впадать в крайности. Я бы например предпочел такой вариант:
for (var i = 1; i <= md; i++){
var option = document.createElement('OPTION');
option.innerHTML = option.value = i;
option.selected = (i == day.getDate());
select.appendChild(option);
}