Конечно выкидывает, так и надо. После проверки условия
if menuGetSelectedIndex = exit then halt; сразу попадаем на end, поток завершается. Надо делать что-то в роде этого после SetTicker:
//В разделе var
clicked,cmdOK:Command;
//после setticker
cmdOk:=CreateCommand('OK',CM_OK,1);
addCommand(cmdOK);
repeat
clicked:=getClickedCommand;
delay(100);
until clicked=cmdOK;
Примерно так, тогда выйдет только при нажатии команды ОК.