I'm not sure I understand exactly what you mean with 'the use of "x" is statically bound'.
I mean that "x" in the expression '([1: "foo"])[x] || "bar"' is associated with a declared object (preferably 'constant x = -1;') during compile time. If the association to a declared object is done at runtime, then it is not static binding.
If, for example, I write
int foo() { int y=17; return y; }
then the use of "y" is statically bound to the declaration "int y=17;". It can not later be persuaded to suddenly refer to some different "y", of a different type (or value).
Is this a "truly odd" case of a "result of the lookup process affecting the lookup process itself"? Because the lookup process during compilation yielded a local variable, a stating binding was used. I don't see why this could not be the case with constants.