TL; DR: un motor es solo una colección de componentes reutilizables.
Muro de texto: los juegos almacenan una representación del mundo, por ejemplo, tendrías una entidad como una casa, que tiene una malla que define cómo se ve su geometría y una posición.
Ahora, probablemente tenga más de una entidad. Digamos que tenemos un personaje controlado por el jugador y algunas cajas. Cuando el jugador quiere moverse, mueves al personaje y compruebas si choca con alguna casilla. Ahí es donde entra en juego la física. Dependiendo de cómo se modele la física, el personaje puede simplemente caminar a través de las cajas, detenerse frente a las cajas o empujar las cajas.
Eso sí, esto solo cambia el estado interno del mundo del juego.
Luego, después de calcular el movimiento y la física, representaría un marco, por ejemplo, dibujará el estado actual del mundo en la pantalla.
OpenGL y DirectX son API de gráficos, solo se usan para representar cosas (por ejemplo, el personaje) en la pantalla.
Entonces, básicamente le estás diciendo a OpenGL / DirectX 'Quiero dibujar el personaje en la posición 1 y un cuadro en la posición 2, y ...'.
Por supuesto, esto es una simplificación excesiva.
De todos modos, dado que no queremos seguir ese procedimiento paso a paso todo el tiempo, ponemos esas cosas en funciones y clases. Por lo tanto, podríamos tener una clase física que contenga todas las funciones necesarias para la simulación física, o una clase gráfica que interactúe con la API gráfica y dibuje nuestras entidades. Et voila, tenemos un motor.