...e interactuar con programas cuyos prgramadores decidieron no hacerles interfaz grafica...
Una puntualización.
Aunque tengan interfaz gráfica, puedes seguir procesando comandos lo uno no es alternativo a lo otro, es más una alternativa que toma el programador.
Yo es raro que haga un programa (que tenga su interfaz gráfica), sin que además provea comandos para permitir por ejemplo realizar ciertas cosas desde la shell del sistema o mediante algún script que uno precise. No provees a través de comandos toda la funcionalidad que provee la interfaz porque podría llegar a ser muy complejo, pero si media/una docena de comandos con sus respectivos parámetros, de aquellas acciones que uno considera que puedan ser más frecuentemente usadas y necesarias tratadas de ese modo.
Por ejemplo: Si creas un programa que opera con imágenes (cn toda su interfaz), sería muy útil proveer un comando que dirima si un determinado fichero es del tipo que señale su extensión. o Incluso uno que convierta un fichero de un tipo a otro, etc...
La forma ahabitual de tratarlo es examinar la cadena de comandos... si está vacía (es una cadena nula) abres la interfaz, si no, entiendes que se ha recibido un comando lo procesas y al término cierras la aplicación.