Lo que puedes hacer es que cada dialogo que llamas sea una "propiedad" del anterior. Por ejemplo:
Código Delphi
[-]
Tdialogo3=class(TForm)
end;
Tdialogo2=class(TForm)
dialogohijo: TDialogo3;
end;
Tdialogo1=class(TForm)
dialogohijo: TDialogo2;
end;
De manera que al iniciar el primer dialogo en mostrarse es el TDialogo1, en el momento que lo necesites muestras el dialogo2 con un ShowModal. En el código de dialogo2 llamas al dialogo3 con otro showmodal. De esta forma si cierras dialogo3 no puede cerrar a su vez a su "papá" (dialogo2) y así sucesivamente.
Por otro lado, si usas Show en lugar de showmodal, la ventana queda "flotando" y puedes seguir trabajando con la aplicación, pero en ese caso tendrías que verificar que no se permita abrir 2 instancias del mismo diálogo. De hecho regularmente un dialogo siempre es modal, ya que su trabajo es solicitar datos para realizar una acción.
Nos ayudaria su pusieras algo de código o nos indicaras precisamente que quieres hacer.