En los ejemplos que expones tienes todas las funciones necesarias para hacer lo que deseas:
Código Delphi
[-]
Console.SetWindowSize(20, 5);
Console.Clear();
Console.SetCursorPosition(0, 0);
Console.Write(" INICIO ");
tecla = Console.ReadKey(true).Key;
Utilizando esas funciones puedes hacer lo que deseas, teniendo un array o lista con los elementos del menú, una variable/constante con la cantidad máxima a mostrar y una variable que indique el elemento seleccionado y otra el índice del elemento que se muestra como primero en la lista. Al mover el cursor hacia abajo incrementas el índice del elemento seleccionado, solo si existen más elementos, y si el elemento seleccionado es mayor al máximo elementos a mostrar menos el índice del elemento superior mostrado, entonces incrementar este último valor. Una lógica similar funcionará para cuando quieras subir en el menú. Y luego de cualquier cambio, lo más simple es redibujar todo el menú.
No vas a encontrar la solución a medida de tus necesidades con tantas condiciones, por lo que es indispensable en comprendas las herramientas utilizadas y la lógica, aquí tienes algun ejemplo similar:
https://www.youtube.com/watch?v=qAWhGEPMlS8
Saludos