Ordering terms before displaying posts

You could use tax_query to get only the posts with the term that is currently being looped.

$argsPost = [
 'post_type' => 'meal',//CPT meal
 'posts_per_page' => -1,
 'meta_key' => 'ordre', 
 'orderby'   => 'meta_value', // Use the custom post order
 'order'     => 'ASC' 
 'tax_query' => array(
    array(
        'taxonomy' => 'cat_meal',
        'field'    => 'term_id',
        'terms'    => $term->term_id, // Only query the posts that have the current term in foreach loop
    ),
 ),
];

Try replacing the $argsPost in your first code example with this one and see what happens.

I have a vague memory of doing something like this myself on couple of sites.

EDIT 20.10.2018

I looked at the Ordering Posts with Custom Taxonomy Terms Array discussion that you had linked and you could also use the solution Milo had posted.

Something like this (might need some tweaking)

$args = array(
'post_type' => 'meal',
'posts_per_page' => '-1',
// add extra sorting related key/value pairs here
);
$my_query = new WP_Query( $args );

// you original get_terms function
$args_tax = [
'parent'    => 0,
'hide_empty' => 0,
'meta_key'      => 'ordre',// I added an ACF with number from 1 to 8 to order
'orderby'   => 'meta_value',
'order'     => 'ASC'
];
$terms = get_terms('cat_meal', $args_tax); // tax cat_meal

// Loop terms
if ( ! is_wp_error( $terms ) && ! empty( $terms )  ) {
    foreach( $terms as $term ) {
        while( $my_query->have_posts() ) {
            $my_query->the_post();
            if( has_term( $term->term_id, 'cat_meal' ) ){
                // output post
            }
        }
        $my_query->rewind_posts(); // rewind custom query for the next foreach term loop
    }
}

This way you would only make one WP_Query and just loop the results over and over again for each term. This might be better performance wise instead of doing separate WP_Query for each term, but this is just a hunch.