Well, Lazarus seems to know both "programs" "and applications".
For me the difference was that "applications" have message queues, while "programs" are just "linear" code execution. Or say object oriented vs. straightforward code (both descriptions are just rough classifications of course). The first is perfect for GUI, the second perfect for command line.
Actually, there are a few things where such an approach (as from the demo) is useful. Take a look at Microsofts codesign.exe, for example. All it needs is a password input. Implementing all the application surroundings like a message loop is unnecessary there, but the window is an advantage over a command line input since it simplifies copy'n'paste of the password.
Next, I myself have a bunch of small utilities that for example just update a special file with new information, run by the task scheduler. Its straight-forward really, a "program", but in case of a problem, I want to display an error dialog (while the console output would always be piped into a log file, for example). I absolutely don't need a message loop running (or at least initialized) somewhere in the background for such simple tasks (sorry for abstracting TApplication to a mere message loop here

).
So, yes, I have a bunch of real life console "programs" that combine command line with a MessageBox for special situations.
I guess the keyword was that "
I don't need the loop" ... while the WinAPI allows these simple dialogs to be "stand-alone", those other widgetsets probably wouldn't? Graphical dialogs on a Linux console program sound a bit... well... different from the Windows approach of course.