You seem to have developed some idea what you're doing. Trial & error for learning coding works well for me, apparently as for you.
Not really my business (meaning you don't have to do this), but you might consider adding another level below cookies, entrees, etc. You don't have to make use of it now, but it'll be easier to implement in the future if provisions are put in place initially.
I think it'll be best to go with the targeted query for each category as a strategy. Things are even easier since posts are output for terms on one level, if I understand correctly. I believe all recipes are output for the cookies etc. level, no recipes exist at the sweet level that have no child terms that would need to be output directly under Sweet.
You'll want to make use of the $args parameter when you use get_terms(). It's the same array format as with WP_Query, except the keys are different. You will have nested foreach loops for each term level. You will do the WP_Query very much as you are now, except it'll be limited to a particular term on that level. You'll want to use the tax_query format in WP_Query $args because you don't want to include children, which would be that extra level we are not yet using.
Anyway, back to get_terms() arguments. You will want to limit the returned terms to immediate children and a particular parent. So start by getting the top level terms for the recipe taxonomy, which will be sweet and savory.
Foreach top level term, get the immediate child terms. Also output whatever title or header you want for the top level Sweet, Savory terms.
Nested inside the top level foreach, you will do another get_terms() and foreach for the immediate children. Cookies, Cakes, etc. Output the sub title or sub header. Feed the term to the WP_Query $args and output the returned posts.
It will be easy to slip in an extra get_terms() level so that posts are output separately for each type of cookie, cake, etc. in the future.
In summary, you code will be structured like this pseudocode example:
get_terms('recipes', array('parent'=>0))
foreach term {
echo $term
get_subterms('recipes', array('parent'=>$term))
foreach subterm {
echo $subterm
WP_Query(tax_query=>array('terms'=>$subterm,'children_of'=>false))
foreach post {
$post->the_post()
}
}
}
I hope you're getting some enjoyment out of this. Cheers.