If this question is not answered, I guess I do not understand the question. Here is another answer . . .
In this case, eval expr() is not working as I would expect. However, I almost never use eval expr() instead I would write
column1 = "names";
val = Eval(Expr(":" || column1));
If you run this, val = ":names"
Alternatively, you could simply write
val = Eval(":" || column1);
or
val = ":" || column1;
However, if you want to actually refer to the column whose name is "names" then you will have to parse val. . .
val2 = parse(val);
Now you can, for example, get the value in row one of this column by running val2[1].
If your question is not answered at this point, please restate your question.