Display Custom Post if custom field is marked

Of course it will not return any posts if your first post does not have custom field feature-it. Because you are checking for custom field after you are running your query.

So let me explain what exactly you are doing in your query. You are asking WordPress to return one post with post_type courses. And WordPress will return only 1 post regardless of custom field. After that you are asking WordPress to check for custom field feature-it and if this post have custom field then it will print title and thumbnail. If post does not have custom field then it will not print anything.

You are suppose to get one post with post_type courses which have a custom field feature-it. So you will need to check it within you query. This is how it should be checking for custom field within WP_Query

$args = array(
    'post_type' => 'courses',
    'posts_per_page' => 1,
    'meta_query' => array(
        array(
            'key' => 'feature-it'
        )
    )
);

$loop = new WP_Query( $args );

if ( $loop->have_posts() ) :

    while ( $loop->have_posts() ) : $loop->the_post();

        echo "<h3>";
            the_title();
            get_the_post_thumbnail();
        echo "</h3>";

    endwhile;

endif;

wp_reset_postdata();