How to default/force the user’s display_name to their nickname?

You can force this with a hook that activates when the profile is updated. The next step would be to hide the display_name select box, you can do that with some Javascript.

add_action( 'user_profile_update_errors', 'wpse7352_set_user_display_name_to_nickname', 10, 3 );
function wpse7352_set_user_display_name_to_nickname( &$errors, $update, &$user )
{
    if ( ! empty( $user->nickname ) ) {
        $user->display_name = $user->nickname;
    }
}