En realidad no es así. Cuando asignás al innerHTML de un objeto DOM la respuesta ajax, esta se escribe tal como la traés y sí funcionan los atributos id presentes en dicha respuesta (para ser más exactos, y sólo en algunas versiones de Explorer, no estan disponibles algunos tags, como script y object -o embed, no recuerdo- por ejemplo, pero sí la mayoría de los elementos). Esto, aunque no veas el código fuente, podés verlo escribiendo un bookmarklet como este en la barra de direcciones de tu página:
Código PHP:
javascript:alert(document.getElementsByTagName('body')[0].innerHTML);void(0);
También tenés que tener en cuenta que no sólo existe la referenciación por id, podés referenciar el elemento de otras maneras (vía getElementsByTagName, vía el objeto event y sus propiedades target (estandar) o srcElement (explorer), etc. )
Otra cosa a tener en cuenta es que, de la misma manera que hay que tratar el código javascript para que funcione, dependiendo de cómo estén definidos, puede ocurrir lo mismo con ciertos estilos css.