Vale, rebuscando por internet he visto que el orden en que se inicializan las units no es siempre como se declaran las units en los uses, ya que si dependen también entre ellas en la parte implementation el compilador lo hace como le da la gana...
Al final, y para no tener que hacer el truco de inicializar cosas de la unit2 en la unit1 como dice "rgstuamigo" utilizo
Código Delphi
[-]
procedure RegisterLineClass(ALineClass: TGraphPrivateLinkClass);
begin
if not assigned(LinesList) then
LinesList:=TList.Create;
LinesList.Add(ALineClass);
RegisterClass(ALineClass);
end;
y en la parte initialization también compruebo si está o no asignada para crearla o no.
Como os digo, rebuscando en internet encontré que esto es más bien un bug del compilador de Delphi:
http://qc.embarcadero.com/wc/qcmain.aspx?d=72245
Aquí exponen que el orden initialization que se espera NO es el que se obtiene, y que además ocurre en todas las versiones de Delphi. Incluyen un ejemplo y todo para demostrar el problema.
Yo por mi parte llego a la conclusión de que en el bloque initialization no debe utilizar otras variables/funciones de otra unit, y que si las utiliza, dichos objetos se deben inicializar manualmente (con un init propio) para estar seguro de que no va a fallar.
Gracias por los comentarios y ayuda,
Un saludo,
LoPiTaL