So I found the solution after tons of searching from the events calendar’s website and modified it to suit my needs. The code is as shown below: (Note I also removed the array to string conversion since it’s pretty pointless.)
<?php
// Support for multiple locations to be filtered.
$request_cities = array_map(function($item){return utf8_decode(urldecode($item));}, explode('+', $_REQUEST['city']));
$request_states = array_map(function($item){return utf8_decode(urldecode($item));}, explode('+', $_REQUEST['state']));
$request_countries = array_map(function($item){return utf8_decode(urldecode($item));}, explode('+', $_REQUEST['country']));
//Retrieve venues that match query criteria
$args = [
'nopaging' => true,
'post_type' => 'tribe_venue',
'meta_query' => [
[
'key' => '_VenueCity',
'value' => $request_cities,
'compare' => 'IN',
], [
'key' => '_VenueState',
'value' => $request_states,
'compare' => 'IN',
], [
'key' => '_VenueCountry',
'value' => $request_countries,
'compare' => 'IN',
],
'relation' => 'AND'
]
];
$venues = get_posts($args);
$venue_ids = wp_list_pluck($venues, 'ID');
wp_reset_postdata();
$event_args[] = [
'meta_query' => [
[
'key' => '_EventVenueID',
'value' => $venue_ids,
'compare' => 'IN',
]
],
'paged' => $paged
];
$events = tribe_get_events($event_args);
?>