Extend WP_User_Query or WP_User to return all custom fields?

In cases like this its better off (IHMO) to simple use a custom query using the $wpdb class

ex:

<?php
global $wpdb;

//first get a list of all meta keys
$keys = $wpdb->get_col("SELECT distinct meta_key FROM $wpdb->usermeta");

//then prepare the meta keys query as fields which we'll join to the user table fields
$meta_columns="";
foreach ($keys as $key) {
    $meta_columns .= " MAX(CASE WHEN um1.meta_key = '$key' THEN um1.meta_value ELSE NULL END) AS ".str_replace('-','_',$key).", \n";
}

//then write the main query with all of the regular fields and use a simple left join on user users.ID and usermeta.user_id
$query = "
SELECT  
    u.ID,
    u.user_login,
    u.user_pass,
    u.user_nicename,
    u.user_email,
    u.user_url,
    u.user_registered,
    u.user_activation_key,
    u.user_status,
    u.display_name,
    ".rtrim($meta_columns,", \n") ." 
FROM 
    $wpdb->users u
LEFT JOIN 
    $wpdb->usermeta um1 ON (um1.user_id = u.ID)
GROUP BY 
    u.ID";

$users  = $wpdb->get_results($query,ARRAY_A);
var_dump($users);

keep in mind that this is an example you hould build on like filtering unwanted users and meta keys.