this is a side effect of a rather necessary series of steps that mIRC goes through for /var to work. /var, like /if and /while, is special in that it isn't interpreted via the usual 'evaluate the line -> split it up into a collection of tokens -> call the appropriate command' procedure. that's why //va $+ r %a isn't recognized as a usage of /var.
if /var is detected, the line is split up into a collection of declarations based on the position, if any, of the commas. each declaration is translated into /set -l %var value; this is where the problem you're observing comes from. the rule appears to be "if the space delimited token after the variable name is '=' then don't include it in the translation". that's why %a = $+ b c becomes set -l %a $+ b c and works as desired.
all this occurs BEFORE the evaluation of code in the line. that's why your first example doesn't work as expected: %a $+ b = c becomes set -l %a $+ b = c. the first token after the variable name is '$+', not '=', so the '=' is preserved. for your first example to work as the second example does, the translation procedure would presumably be modified so that it carries on searching for an = to discard past the first token after the variable name if that token is '$+', and past the next 2 if another '$+' is met, and so on.