Sobre los objetos anidados, no hay más camino que recorrer todos los elementos, entrando a cada propiedad objeto o lista de objetos. Eso ya lo hace WriteComponent. Pero si quieres implementar un mecanismo propio que evite la derivación de TComponent, entonces puedes echar una mirada a los métodos WriteProperties y WriteProperty de la clase nativa TWriter. Aunque en lo personal y teniendo Delphi 2010 o superior, buscaría en él algo de la RTTI extendida que facilite las cosas.
Lo de la "buena razón", ni qué decir...gajes del oficio de abreviar.