The /apple alias doesn't know that its parameters came from variables. All it sees are the final values of the parameters, after all evaluations have been performed. Now "%small %medium %big" evaluates to "small <empty> big", ie "small", followed by two spaces, followed by "big".
However, in (almost) all /commands, consecutive spaces in the parameter string are merged into a single space, so the string eventually passed to /apple is "small big", hence $1 = small and $2 = big.
A way to get around this is to call /apple not as a command but as a custom identifier, ie instead of
apple %small %medium %big
use
noop $apple(%small,%medium,%big)
This way $1 = small, $2 = $null and $3 = big.
(you can omit /noop if apple doesn't call /return <value> at any point)