Una terminal de Unix sigue la misma filosofía que el resto de Unix: aparentar que es un fichero, por lo que tendrá entradas y salidas como si escribiéramos en un fichero.
Si dos o más programas tienen permiso para escribir en la terminal del usuario (por ejemplo, varios programas ejecutados en segundo plano), sus salidas saldrán, efectivamente, en la posición actual del cursor.
Esta forma de trabajar es muy distinta de cuando antiguamente se accedía directamente a la memoria de vídeo. Al ser ahora terminales virtuales, tienen la ventaja de ser 'independientes' del hardware subyacente, pero tienen la desventaja de no tener muchas posibilidades de acceso simultáneo o aleatorio, como cuando accedemos a la memoria de vídeo de la tarjeta gráfica.
Incluso si pensamos en utilizar las secuencias de escape para recordar la actual posición del cursor, cambiarlo a una nueva, pintar algo, y recuperar la posición anterior, siempre darse el caso de que ocurra otra interrupción de otro proceso que quiera pintar en otro sitio.
Hay varias soluciones. Una de ellas es crear una "memoria de pantalla" fuera de la pantalla. Un lugar de memoria compartida donde los procesos puedan escribir de forma 'simultanea'. Y luego un proceso que vaya refrescando la pantalla con el valor de los cambios introducidos.
El módulo Curses hace algo parecido. Escribes texto con addstr(), pero no aparece hasta que haces un standout()/refresh(). Curses se ocupa de que la salida sea con el menor número posible de caracteres, optimizando secuencias de escape.
En tu caso, sería desviar el pintado, desde la pantalla a ese buffer (podría ser un simple array que almacene las líneas de pantalla). Y que otro programa se encargase de pintar o actualizar esa parte, cuando el usuario no esté escribiendo.
Seguro que hay más opciones...
Actualización: encontré el script
rep que es un ejemplo de uso de Curses con repetición de ejecución de un comando.