"Why can't I drag a variable reporter onto the pulldown menu slot of SET?"
tl;dr: Because what you probably mean isn't what it would do.
Snap! evaluates input expressions before invoking the block to which the expression is an input. So, for example, if you say
the SAY block doesn't know anything about arithmetic; it neither knows nor cares how its input value of 5 was computed.
Well, there's no reason it'd be any different for SET in place of SAY.
SET (FOO) TO 87
would first evaluate FOO, determine that its value is 5, and then try to set 5 to 87, which makes no sense.
This technique would be sensible, and occasionally even useful, if the value of FOO were the name of a variable, say BAR. Then
SET (FOO) TO 87
would set BAR to 87. See? I told you it's not what you meant! :~)
So instead of confusing you, we just rule it out.