Cuando una componente tiene una referencia a otra (sin ser su dueña) lo que se usa es una combinación de los métodos FreeNotification de la componente referenciada y Notification de la componente que tiene la refrencia.
Para fijar ideas considera el caso de un DBEdit y su propiedad DataSource.
Cuando asignas una componente TDataSource a la propiedad DataSource del DBEdit, éste usa DataSource.FreeNotification(Self) lo cual instruye a DataSource a notificar al DBEdit cuando se destruya.
El DBEdit recibe la notificación en el método Notification (deberás redefinirlo):
Código Delphi
[-]
if (AComponent = Self.DataSource) and (Operation = opRemove) then
Self.DataSource := nil;
Como ves, es en este método entonces donde aprovechas para quitar la componente referenciada de tu lista y fijar cualquier referencia a ella a
nil para así saber que ya no es una referencia válida.
Imagino que esto es lo que hace TComponentList.
// Saludos