Just alter your database query to also grab the user ID, and then return an array of data objects (as opposed to just the meta value):
function get_meta_values( $key, $type="workout", $status="publish" ) {
global $wpdb;
if ( empty( $key ) )
return;
$r = $wpdb->get_results(
$wpdb->prepare( "
SELECT pm.meta_value, p.post_author FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = '%s'
AND p.post_status="%s"
AND p.post_type="%s"",
$key,
$status,
$type
)
);
if ( $r ) {
$user_ids = wp_list_pluck( $r, 'post_author' );
cache_users( $user_ids );
}
return $r;
}
$workout_leader = get_meta_values( '1_rep', 'workout' );
foreach ( $workout_leader as $data ) {
echo $data->meta_value;
echo $data->post_author; // User ID
// Any other user-related data.
echo get_the_author_meta( 'display_name', $data->post_author );
}