Two reasons for having different NodeHandle instances in the same node are:
ros::NodeHandle("/foo").hasParam("bar");

2. control callback spinning: This usecase is more advanced, or at least less common. It is possible to assign different callback queues to different NodeHandle instances, so you can for instance have a node in which some callbacks are processed at high-frequency (e.g. control commands), while others are processed at a slower rate.