Te voy a comentar una chapuza (con la esperanza de que alguien me de soluciones... ¿por qué no?

) para evitar los moldeos de tipos.
Desde luego el código se hace más legible y es muy muy fácil hacerlo.
En Tcuentascontables defines una función:
Código Delphi
[-]
TCuentasContables = class(TObject)
public
function AsCuentaContable:TCuentasContables;
end;
function AsCuentasContable:TCuentasContables;
begin
result := TCuentasContables(self);
end;
De forma que tu linea:
Código Delphi
[-]
TCuentasContables (tvArbol.Items [N].Data ).DevuelveSaldoCuenta
quedaría como :
Código Delphi
[-]
tvArbol.Items[N].Data.AsCuentaContables.DevuelveSaldoCuenta
Este truquito lo he usado en una sóla ocasión, y la verdad el código se aclaró bastante en legibilidad. No sé si hay otra solución, espero que sí

.
En mi caso, tanto Talbaran, TFactura y TCliente heredaban de TBaseObject y en TBaseObject creé esas 3 funciones asAlbaran, AsFactura, AsCliente. Por supuesto en la aplicación siempre usaba TBaseObject para crear los objetos:
Código Delphi
[-]
var
nuevo :TBaseObject;
begin
nuevo := TAlbaran.Create(...);
end;
A partir de ahora, uso nuevo.asAlbaran y elimino todos los moldeos de tipos que usaba en la aplicación final.
Por supuesto debes saber lo que haces, porque si tienes un Talbaran y pides asCliente tendrás errores de ejecución (probablemente...).
Como ves, realmente el moldeo de tipos no hay quien lo quite, está presente en las funciones, pero en la aplicación final no tienes ninguno.
Saludos.