Get post from Category by Priority

You can first get posts from your featured category and check if it has any posts or not. If yes, you will show them.

If not, you will make another query that will get 3 posts from random categories (as you described) and show them.

$events_args = array(
            // include the code in your question here 
);
$events = new WP_Query( $events_args );
if ($events->have_posts()){
     while ($events->have_posts()) : the_post();
          // your loop code here
     endwhile;
} 
if ((3-($events->found_posts)) > 0) {
     wp_reset_postdata();
     $remaining = 3 - ($events->found_posts);
     $random_args = array(
         // your desired array of attributes, set 'posts_per_page' to $remaining
     );
     $random_posts = new WP_Query($random_args);
     while ($random_posts->have_posts()) : the_post();
         // your loop code here
     endwhile;
}