This can be done via a custom query: Be sure to hook the query filter early enough.
Note: This solution doesn't help more than the answer from @m0r7if3r above as the query will be run before the filter.
function count_all_posts_by_user_cb( $count, $userid )
$where = $wpdb->prepare( 'WHERE post_author = %d AND post_type = %s AND ', $userid, $wpdb->posts )
$where .= "(post_status = 'publish'";
// for a full list, @see http://codex.wordpress.org/Post_Status_Transitions
foreach( array( 'private', 'draft', 'pending', 'future' ) as $status
$where .= $wpdb->prepare( " OR post_status = '%s'", $status );
$where .= ")";
$result = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
add_filter( 'get_usernumposts', 'count_all_posts_by_user_cb', 20, 2 );
Note: The filter will affect all calls to
count_user_posts();. If you don't want that, then you'll have to check inside the filter cb fn, if the user has a specific role or ID or whatever restriction you need.