A variable reference (4.1.1) is just one type of syntax (one
expression type), which the expander initially has to treat like any
other expression type because the kind of an expression type doesn't
become apparent before expansion.
Thanks, I understand now. In the presence of identifier syntax, that is indeed true. Without it, we always know the type of an identifier in operand position.
In the intended R7RS (small) model, however, the semantics becomes
much more complicated because one type of syntax (variable references)
is now treated differently from all other types of syntax. For
variable references, later definitions are taken into account, for all
other types of syntax, they are not.
More precisely, they need not be. R7RS-small 5.4 says "Any use of a
syntax keyword before its corresponding definition is an
error. In particular, a use that precedes an inner definition
will not apply an outer definition." So it can signal an error or it can apply the inner definition.
However, finally, you cannot just expand the
right-hand sides in the resulting body environment (as it may contain
later syntax definitions that must not be applied by the intended R7RS
(small) model).
Not "must not" but rather "are not required to be".