Custom menu with different behavior for every item

It is possible to do this using the backend nav menu support, using classes as markers that are then picked via the walker_nav_menu_start_el filter ( which then do queries to grab posts and insert their markup )

e.g.

add_filter( 'walker_nav_menu_start_el', 'menu_show_media_post', 10, 4 );

function menu_show_media_post( $item_output="", $item = '', $depth="", $args="" ) {
    global $post;

    $query = false;

    if ( is_array( $item->classes ) ) {

        foreach( $item->classes as $class ) {
            if ( $class == 'some_marker_class_to_watch_for_goes_here') {
                $query = true;
            }
        }
    }

    if ( $query ) {
        $args = array(
        );
        $q = new WP_Query($args);
        if($q->have_posts()){
            while($q->have_posts()){
                $q->the_post();
                // do stuff and append output to $item_output, dont echo it out
            }
        }
        wp_reset_postdata();
    }
    return $item_output;
}

All in all this is a fairly advanced level thing to do.

If you want to go a step further you can add UI controls to the menu pull outs themselves, and store the data as post meta for each menu nav item. This would be a better way of doing it, but it’s not for the faint of heart as it requires JS code in the admin backend, and a custom walker to render out the initial html for the nav admin interface.