Something I've found challenging is the inconsistency between babel
languages. It makes it difficult for a babel user to get a source
block to do what they want, or for a babel developer to even know what
correct behavior is.
I'm not sure if anything can be done since changes will likely break
existing behavior, but it's good to at least know what the rule is and
where the exceptions to the rule are. To that end I started a page on
worg [1] to document current behavior for actions taken across babel
languages.
[1] https://orgmode.org/worg/org-contrib/babel/languages/lang-compat.html
FWIW, I did not understand the "functional" and "scripting" terms that you use on this page.
I've understood now, from
https://orgmode.org/worg/org-contrib/babel/intro.html, that you mean "results: value" and "results: output". For me it would be better if you said that instead of "functional" and "scripting", as the former is what I can actually type in my Org files.