Na verdade, não é necessário retornar uma instância de \Magento\Framework\View\Result\Page. O executeé esperado para retornar uma instância de uma classe que implementa a interface \Magento\Framework\Controller\ResultInterface.
\Magento\Framework\View\Result\Pageé apenas um retorno possível.
Outros retornos possíveis são
\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
e pode haver outros.
dê uma olhada no método Magento\Framework\App\Action\Action::dispatch().
Isso deve retornar uma instância \Magento\Framework\Controller\ResultInterfacee, com base no resultado, diferentes ações são executadas, novamente chamando métodos declarados em ResultInterface.
Este dispatchmétodo chama $result = $this->execute();qual é o executemétodo da ação do controlador. Portanto, acho que isso é consistente e facilita a introdução de um comportamento diferente para uma ação do controlador. Você só precisa adicionar uma nova classe que implementa ResultInterfacee tudo será tratado pela estrutura.