Can I use WP_Query to find a post with a particular menu_order?

Matching by menu_order is easy, like this:

$args = array(
   // find posts with menu_order 4 
   'menu_order' => 4,
   'orderby' => 'menu_order',
   'order' => 'ASC',
   'posts_per_page' => 10,
);
$query = new WP_Query( $args );

However, larger or smaller option for menu_order is not provided by default in WP_Query.

You can still filter the where clause to achieve that. Something like this:

$args = array(
   'orderby' => 'menu_order',
   'order' => 'ASC',
   'posts_per_page' => 10,
);

add_filter( 'posts_where', 'wpse_menu_order_filter', 10, 2 );
function wpse_menu_order_filter( $where, $query ) {
    // remove this filter to avoid changing other queries.
    remove_filter( 'posts_where', 'wpse_menu_order_filter' );

    // custom where clause to show only posts with menu_order greater than 4
    return $where . ' AND wp_posts.menu_order > 4 ';
}
$query = new WP_Query( $args );

You can do the same thing for smaller check as well.

More advanced solution:

You can also enhance the menu_order argument so that the greater or lesser sign and the compare value is not hard coded within the filter function. Like this:

$args = array( 
   'post_type' => 'page',
   'menu_order' => array(
        'value' => 5,
        'compare' => '<='
    ),
   'orderby' => 'menu_order',
   'order' => 'ASC',
   'posts_per_page' => 10,
);
add_filter( 'posts_where', 'wpse_menu_order_filter', 10, 2 );

function wpse_menu_order_filter( $where, $wp_query ) {

    remove_filter( 'posts_where', 'wpse_menu_order_filter' );

    $args = $wp_query->query;

    if( isset( $args['menu_order'] ) && is_array( $args['menu_order'] ) ) {

        $menu_order = $args['menu_order'];

        if( isset( $menu_order['value'] )
            && isset( $menu_order['compare'] ) ) {
        
            $compare = $menu_order['compare'];

            // allow only four comparisons: '>', '>=', '<', '<='   
            if( in_array( $compare, array( '>', '>=', '<', '<=' ) ) ) {

                $value = $menu_order['value'];

                if( is_scalar( $value ) && '' !== $value ) {
                    $value = absint( $value );
                }
                else {
                    $value = 0;
                }                      
                return sprintf( $where . ' AND wp_posts.menu_order %s %d ',
                                $compare, $value );
            }
        }
    }
        
    return $where;
}
$query = new WP_Query( $args );

With the above implementation, you can just change the $args to get the desired result. For example:

// menu_order less than or equals 5
$args = array( 
   'post_type' => 'page',
   'menu_order' => array(
        'value' => 5,
        'compare' => '<='
    )
);

// menu_order greater than 10
$args = array( 
   'post_type' => 'page',
   'menu_order' => array(
        'value' => 10,
        'compare' => '>'
    )
);

// equals will still work like before
$args = array( 
   'post_type' => 'page',
   'menu_order' => 6
);