How to retrieve posts from parent category, splitting them per children when displayed?

Calling WP_Query three times isn’t too good for performance, as it will make three queries to the database. The way you’re currently approaching this seems like the proper (and fastest) way in may opinion. However, you should be calling $category_posts->rewind_posts() after each while-loop to reset WP_Query‘s loop to the first post.

Furthermore, your current way of checking for a category (like “France”) isn’t very pretty. WordPress has a function to check whether a post has a term, has_term, which is perfectly suited for your cause: has_term( 'France', 'category' ) (you can omit the last parameter, $post, as it uses the current post in the loop by default).