Единственным возможным объяснением этого поведения является ошибка в вашем коде, из-за которой вы не можете дождаться завершения потока, прежде чем завершить процесс.
Измените код, чтобы быть таким:
SelfThread := TSelfThread.Create(False);
SelfThread.WaitFor;