Functions ("custom blocks") are just procedures that may-or-may-not mutate global state - This makes it hard to build up abstractions, etc.
Scratch effectively mandates that you write spaghetti code.
Ah, I see now.
Yeah, Scratch really should let you make custom "oval blocks" that return values...