In iOS5 there is a blessed way for controllers to receive orientation events, add/remove callbacks, and they are properly inserted into the responder chain. So if you are going to do it, this is the best way. As long as you don't do silly things like adding the same view to two UIViewControllers you are fine.
Why do it? I see logical to put the game engine on the master controller, write a client, encapsulate that client on a child view controller, and reuse it for the two players.
You could also use nested controllers to encapsulate complexity if you feel you need such thing. Example: one for the interface talking to the game engine, and another for the screen getting events from the engine.
UIViewController containment is easy. You need to read 6 methods and understand what calls what. You are welcome to read the documentation, but in a nutshell:
For example, to nest one controller in another, add the child's view as a regular view, and call addChildViewController: and didMoveToParentViewController: in the order shown below:
// from the parent view controller
ChildViewController *child = [ChildViewController new];
[self addChildViewController:child];
[self.view addSubview:child.view];
[child didMoveToParentViewController:self];