Why doesn't GroupSeparator accept variables? I have used the statements

set V[user_groupseparator] " "

V[x] 12345678 * 100   GroupSeparator="&V[user_groupseparator]"

and expected "1 234 567 800", but the result was "1234567800".

The problem here is how GuiXT handles the space in variable values. The string  " " (one space) is ultimately handled the same way as the empty value "", and groupseparator="" means: no group separator. You can use the following trick: Write

... GroupSeparator="&V[user_groupseparator] "

i.e. an additional space before the ending ".

Since the GroupSeparator takes the first character of the given string only, V[user_groupseparator]="." then takes the '.' as group separator, and V[user_groupseparator]="" or &V[user_groupseparator]=" " both lead to the "space" group separator that you want to have.