I don't know if it would help at all, but it appears how you handle []'s doesn't have this flaw. If I understand correctly, brackets are supposed to force parsing in that nested region first, then jump back to the beginning and then parse the entire string. If the same parsing routine is invoked for it all then [ ]'s should suffer the same fate, yet they don't.

Eval doesn't behave the same as [ ]'s

//var %a = dec , %b = 1 | echo -a $eval(%a %b,99)
dec %b
//var %a = dec , %b = 1 | echo -a $+(%a %b)
dec %b

You would assume you'd need to eval the 2nd parameter 1st by using []'s to avoid the issue, which works...
//var %a = dec , %b = 1 | echo -a $+(%a [ %b ] )
dec 1

But so does just nesting the entire thing...
//var %a = dec , %b = 1 | echo -a $+( [ %a %b ] )
dec 1

This last one I would think should suffer the same flaw as it's shorthand $eval(%a %b,2) yet it works perfectly.