If scope is false then the directive scope "inherits" directly from the scope containing the directive. Therefore any changes to this scope (like adding a foo fn) will potentially overwrite things in the parent scope.
If scope is true then there is a new scope for the template of the directive, which doesn't "inherit" any values from the scope containing the directive. This makes is safe to add things to this scope without the fear of damaging the outside scope. You are right that if you want to access the outer scope the you can use $parent.scope but if you add functions to that you are again potentially overwriting things in the outer scope - in fact even worse, since in the case of scope false, you are working with a child scope and only if there is already a field with the same name does it affect the parent scope.
Thinking about it now, even if you could access the transclusion scope, this would be no better than having scope set to false, because if you modify the transclusion scope then you may again overwrite things in the parent scope.
I am pretty sure one could over come this with a directive but I haven't got my head around it yet.
Pete