немного теории, речь правда о делфе, както задумал я прогу, давно это было, которая при запуске из консоли работает как консольная а из гуи как гуевая.
в винде нет понятия консольная программа
при запуске программы из консоли, эта самая консоль аттачится к проге, а если из гуя то нечему аттачится, а далее прога сама решает что делать - если есть консоль и хочет быть консольной - работает - если нет консоли - создает консоль, соответственно если не хочет быть консольной и есть консоль то прога ее освобождает (аттачится/если есть консоль/создает/освобождает - соответствующий винапи). 
директива компилятора - создавать консольную прогу как раз и управляет какой вариант кода в компилить в прогу, но это в делфе, возможно в фреепаскале както можно более гибко регулировать это.
теперь по существу
Seenkao писал(а):Хорошо, но как тогда создать простое приложение без консоли? Не прибегая к методу удаления LCL из LCL.
если с ходу - в начале работы программы - вызываете функцию получить текущую приаттаченную консоль и если она есть - освобождаете ее 
а так надо посмотреть, наверняка это както регулируется (какой код работы с консолью компилятор вкомпиливает), в делфе сделали жестко.
Добавлено спустя 1 час 8 минут 43 секунды:- Код: Выделить всё
- program project1;
 {$mode objfpc}{$H+}
 {$apptype GUI}
 uses
 windows;
 begin
 //  if AttachConsole(ATTACH_PARENT_PROCESS) = false then Assert(AllocConsole());
 //  FreeConsole();
 AllocConsole();
 ReadLn;
 end.
плохо что во фрипаскале такой код не работает, а в делфе работает.
Добавлено спустя 2 минуты 3 секунды:самое забавное реализацию ReadLn не нашел в исходниках
Добавлено спустя 21 минуту 17 секунд:вот это работает
- Код: Выделить всё
- program project1;
 {$mode objfpc}{$H+}
 {$apptype GUI}
 uses
 windows;
 begin
 AllocConsole();
 IsConsole:= true;
 SysInitStdIO;
 ReadLn;
 end.