En realidad 
innerHTML es casi lo opuesto a usar DOM y no forma parte del estandar del W3C. Deberías usar 
document.createTextNode en su lugar.  
Código:
 
// Incorrecto
td.innerHTML  = "Texto";
// Correcto
td.appendChild(document.createTextNode("Texto"));
  El objeto Table cuenta con los métodos 
deleteRow() e 
insertRow() y a su vez el objeto TableRow cuenta con los métodos 
deleteCell() e 
insertCell(). Quizás resulten más sencillos de usar.