This can be accomplished via the [parse_query][1] filter, as follows:

	add_action ('parse_query', array ($this, 'wpse_private_author_query')) ;

	function
	wpse_private_author_query ($query)
	{
		// get our private author query query_var	
		$private_author_query = $query->get ('_private_author_query') ;
		if (empty ($private_author_query)) {
			// our private author query query_var is not set, so bail without modifying $query
			return ;
			}

		$args = array (
			'fields' => 'ID',
			) ;
		$args = wp_parse_args ($args, $private_author_query) ;
		// get the ID's of the users that match our private author query
		$users = get_users ($args) ;

		// unset our private author query query_var
		unset ($query->query_vars['_private_author_query']) ;

		// add the author IDs to the query
		$query->set ('author__in', $users) ;

		return ;
	}

To see this in action, we can do:

	$args = array (
		'post_type' => 'any',
		'post_status' => 'public',
		'_private_author_query' => array (
			'meta_key' => 'meta1',
			'meta_value' => true,
			'meta_compare' => '=',
			),
		) ;
	$posts = new WP_Query ($args) ;

**Note**: the above is more general than your question.  You asked just for user_meta, but the above
will allow searching by _any_ of the characteristics supported by [WP_User_Query::parse_query()][2].  For example,
we can also do:

	$args = array (
		'post_type' => 'any',
		'post_status' => 'public',
		'_private_author_query' => array (
			'role' => 'editor',
			),
		) ;
	$posts = new WP_Query ($args) ;

etc.

  [1]: https://developer.wordpress.org/reference/hooks/parse_query/
  [2]: https://developer.wordpress.org/reference/classes/wp_user_query/prepare_query/