Thanks for this extended bit of reflection. I don't have quick solutions but...
1) We've recognized some of these deficiencies in Unit 3 in terms of a) explaining concepts and b) lacking a place or space for students to go back to re-learn when necessary and c) lacking unplugged activities that directly tie to the language.
We're trying some things in the revision of Unit 5 (coming in mid-late December) to address these things. If they work out, then we'll probably go do something similar to shore up Unit 3.
What I'm trying to say is: you're not alone. we're working to make it better. Keep the faith. Keep trying.
2) As for getting at the idea of functions/procedures right now you might consider referring back to the text compression widget - especially if the difficulty is between defining v. calling a function (very common).
(First this is addressed in one of the function videos, perhaps that's what you were referring to, but if not, you can certainly re-watch that).
Each special character was referring to a stored pattern in the dictionary.
The dictionary, of course, is like the set of functions you define. Once you define it, you don't need to define it again. Calling a function is like using the special character in the compressed text - you want to call on a stored definition of something.
function you are defining a procedure, adding it to the dictionary, so to speak. You only need to do it once for each code pattern you want to store.
...Hopefully you get the gist.