How to display only feautured/sticky listings on the homepage

First, I recomend you to use pre_get_post hook for your purpose. If you are going to use only the new WP_Query in your theme, it has no sense that WordPress run a query before it gets your theme becuause it would be a extra work that will be discarded. Using pre_get_posts we can alter the main query to fit our purpose and get what we want without executing another query.

Thats said. Here an example code:

//Functions for filters
add_action( 'pre_get_posts', 'properties_pre_get_post' );
function properties_pre_get_post($query){

    //limit to frontend, to the main query and to home page
   if($query->is_main_query() && !is_admin() && is_home() ) {
        //the main query to get only sticky posts
        $query->set('post__in',get_option( 'sticky_posts' ));
    }

}

Put that code in functions.php and in your home.php template file you can run the loop as usual.

Custom post types has not support for built-in ‘sticky’ feature but you can create, for example, a tag or taxonomy term and filter by this tag. For example, if you custom post type support post_tags taxonomy you can created a term called ‘featured’ and attach each post you want to this tag and filter:

//Functions for filters
add_action( 'pre_get_posts', 'my_pre_get_post' );
function my_pre_get_post($query){

     //limit to main query, frontend and home page
     if($query->is_main_query() && !is_admin() && is_home() ) {
          $tax_query = array (
                             'taxonomy'=> array('post_tags'),
                             'field'   => 'slug',
                             'terms'   => 'featured',
                             );
          $query->set('tax_query',$tax_query);
          //filter also by your custom post type
          $query->set('post_type','listings');
      } 
}