Hola:
Con respecto a la forma recursiva, hay una clase de "tripa" que permite obtener todos los elementos "etiqueta"...
La raíz en este caso es document.documentElement que se corresponde con la etiqueta html... y los elementos que realmente se consideran nodos son los que se encuentran en el array childNodes... el primer elemento de ese array sería el tag head y el último el tag body...
document.documentElement.childNodes[0] = etiqueta head
document.documentElement.childNodes[1] = etiqueta body
Aunque se podría encontrar espacios en blanco entre las 2 etiquetas que según el navegador podría evaluarse como un nodo intermedio en blanco.
Por cierto, hice unas modificaciones en el destripador con unos breves comentarios.
Saludos