In GameMode.h you’ll find the PlayerController object used by the game.
The value of PlayerControllerClass is set in AGameMode’s constructor.
To use/define your own PlayerController, what you’ll want to do, is subclass APlayerController, and subclass AGameMode, and in YourDerivedGameMode’s constructor…
Build your project and launch the Editor. In the “project properties” set your level’s default game mode to YourDerivedGameMode. That’s it, now the game will use your derived player controller instead of the default one. The technique used is called Polymorphism, a common thread in UE4 development.
To handle menus and what not with the PlayerController as you want, you would use a different level for your menu screen, which could have a different GameMode with a different PlayerContorller with the functionality you were wanting. Once the gameplay level loaded and gameplay started, the GameMode and thus the PlayerController would also change accordingly.