This is the correct behaviour. The third parameter of $regsubex() evaluates differently so that identifiers and variables can be used in the substituted text. This is necessary so that things like $regsubex(abc,/\b([a-z])/g,$upper(\1)) works as expected.

If you want to use the value of a variable as the subtext you just need to use evaluation brackets to change the order of evaluation like so:

Code:
//var %r = \1 | echo -a $regsubex(abc,/(.)/g, [color:red][[/color] %r [color:red]][/color] )