So I’ve spent a couple of hours digging through the engine code to see how this should work, and it really is not a trivial thing to accomplish. The game is making a lot of assumptions about input and controlling the player.
Fortunately for me I can mostly accomplish what I want by using APlayerController::SetInputMode, but I’m a bit dissatisfied with this approach. I’d really like to dynamically change the class that is responding to input.