I had some fun playing with the rigidbody types, and found out if the player is Kinematic and the collided mesh is Dynamic, you get a smooth push-the-object effect.
The problem then becomes what to do if you hit a Static object, because a Kinematic Rigidbody will travel through a Static one… I would assume they just code the player as Dynamic until pushing is required, and then change the player to Kinematic temporarily until the push is done?