Instead of def, you can also apply scantokens which converts from string to tokens. Just ensure your string is MetaPost sensible code:
newinternal string varA ;
varA := "dashed evenly withcolor green";
drawarrow (0,0)--(100,100) scantokens(varA);
You're now able to store a list of strings to be later tokenized, but it's not that useful unless you really need chunks of MetaPost as strings. Another example:
string Vars[];
Vars[1] := "dashed evenly withcolor green";
Vars[2] := "dashed evenly withcolor red";
drawarrow (0,0)--( 100, 100) scantokens(Vars[1]);
drawarrow (0,0)--(-100,-100) scantokens(Vars[2]);
I wouldn't actually recommend it as you might be caught by some expansion issues (as @egreg says, MetaPost, like TeX, works with tokens and thus faces the same issues), but it's fine for the simplest cases.
drawoptions(dashed evenly withcolor green);then draw your arrow(s), then set things back to normal withdrawoptions(). – Thruston Apr 24 '21 at 21:23