Можно. Ядро пропатчить.
Схема работы консольной программы такая:
(виртуальный) терминал <-> ядро <-> твоя программа.
Запустившись, твоя программа получает терминал, с которого была запущена (или не получает, если отсоединена, как демоны). Получив запрос на ввод с stdin, ядро смотрит откуда его может получить (из канала или файла), не найдя, терпеливо ждет, когда пользователь введет что-то с терминала. Каждый введенный символ попадает в ядро и, помимо прочих действий, отправляется обратно на терминал. Это называется эхо. Чтоб его отключить, надо послать специальный системный вызов ядру, что и делает функция-заменитель в ссылке, которую я дал.
Можно, конечно, вместо stdio использовать библиотеки gui или framebuffer, тогда терминал никакого отношения к работе программы иметь не будет. Но это и не будет простой консольной программой.