Lo que tú quieres hacer se llama Ajax, que básicamente permite realizar solicitudes al servidor sin que la página se recargue por completo. Esas solicitudes se realizan por medio de código Javascript. Cuando el navegador recibe los datos del servidor no actualiza la página, sino que los datos quedan a disposición de Javascript, que los puede validar, comprobar el estado de la respuesta y finalmente decidir en qué parte o partes del documento debe escribir el contenido para que lo vea el usuario.
Ajax se puede realizar de diversas maneras. Por supuesto, puedes usar Javascript normal, que tiene diversas API para trabajo con Ajax. Aquí en DesarrolloWeb encuentras bastantes artículos que hablan de todo esto. El API de Fetch es lo más nuevo para hacer solicitudes Ajax, por si te sirve la información.
Pero por supuesto también puedes hacer Ajax apoyado en librerías Javascript, como jQuery, Axios y casi cualquier framework Javascript ofrece sus propios mecanismos.
También puedes "emular" el comportamiento que estás indicando usando frames. O mejor dicho iframes, ya que los frames normales creo que ya los han dejado obsoletos en el HTML y no se deben usar.
Puedes obtener mucha información de aquí: https://desarrolloweb.com/home/ajax