Inicio por comentar que me parece curioso que hayas puesto el tema en el foro de OOP, cuando no estas dando una solución orientada a objetos al asunto.
En objetos, podrías tener un tipo TEngranaje, que a su vez tuviera una colección (TCollection) de TDientes. ¿para eso son las colecciones no?
Sobre el tema que tratas, te aclaro que que dentro de un registro, se puede poner tanto un TStringList como un arreglo dinámico. En ambos casos, lo que realmente residirá en el registro es un puntero a la dirección de memoria donde estará realmente los datos (4 bytes), por lo que las reglas de los registros siguen siendo válidas. Te comento que esto mismo ocurre cuando incluis un string dentro del registro (a menos que sea un string del estilo pascal y no uno de los "nuevos" de delphi 3 o superior).
Entendiendo este punto, verás que si usas un TStringList (o cualquier campo de un registro que sea un objeto) cada vez que creas un nuevo registro, será tu responsabilidad manejar este puntero. Es decir, al crear el registro, podes hacer que apunte a nil, o crear una nueva instancia de la clase correspondiente y almacenarla allí.
Esto compila perfectamente en delphi 7:
Código Delphi
[-]
type
TRegistro = record
nombre: string;
arreglo : array of Integer;
Lista: TStringList
end;
Hasta luego.