How do I sort a WP_USER_QUERY by multiple meta fields?

You can do it with ‘orderby’ parameter. Parameter description:

Field(s) to sort the retrieved users by. May be a single value, an
array of values, or a multi-dimensional array with fields as keys and
orders (‘ASC’ or ‘DESC’) as values. Accepted values are ‘ID’,
‘display_name’ (or ‘name’), ‘include’, ‘user_login’ (or ‘login’),
‘login__in’, ‘user_nicename’ (or ‘nicename’), ‘nicename__in’,
‘user_email (or ’email’), ‘user_url’ (or ‘url’), ‘user_registered’ (or
‘registered’), ‘post_count’, ‘meta_value’, ‘meta_value_num’, the value
of $meta_key, or an array key of $meta_query. To use
‘meta_value’ or ‘meta_value_num’, $meta_key must be also be defined.
Default ‘user_login’.

Example:

$args = array(
    'orderby' => array(
        'user_rate' => 'DESC',
        'user_cat' => 'DESC',
    ),
    'meta_query' => array(
        'relation' => 'AND',
        'user_rate' => array(
            'key' => 'user_rate',
            'compare' => 'EXISTS'
        ),
        'user_cat' => array(
            'key' => 'user_cat',
            'value' => $_GET['cat']
        )
    )
);
$user_query = new WP_User_Query($args);