Imagine that you have something like block: [a b c]. There is today--and probably for the future of binding--a difference between:
code: [... do block ...]
code: compose [... (as group! block) ...]
They might look similar, in that they execute the block through a "link"/"reference", without making a copy.
But the latter makes the contents of the block visible as a group, which means an operation like BIND on the code will affect it. So imagine if BLOCK contained things like RETURN in it and you tried to use this code as the body of a function. The first case would leave whatever binding was on the return initially, while the second would pick up the binding for the new function.