En realidad no es necesario devolver una instancia de \Magento\Framework\View\Result\Page. Se executeespera que devuelva una instancia de una clase que implementa la interfaz \Magento\Framework\Controller\ResultInterface.
\Magento\Framework\View\Result\PageEs solo un posible retorno.
Otros posibles retornos son
\Magento\Framework\Controller\Result\Redirect
\Magento\Framework\Controller\Result\Raw
\Magento\Framework\View\Result\Layout
\Magento\Framework\Controller\Result\Forward
\Magento\Framework\Controller\Result\Json
y puede haber otros
Echa un vistazo al método Magento\Framework\App\Action\Action::dispatch().
Esto debería devolver una instancia \Magento\Framework\Controller\ResultInterfacey, en función del resultado, se toman diferentes acciones, nuevamente llamando a los métodos declarados en ResultInterface.
Este dispatchmétodo llama $result = $this->execute();cuál es el executemétodo de la acción del controlador. Así que supongo que esto es por coherencia y para facilitar la introducción de un comportamiento diferente para una acción del controlador. Solo necesita agregar una nueva clase que implemente ResultInterfacey todo será manejado por el marco.