I'm sure I remember a language where you can do that... Hmm. *snaps fingers* Ah yes: [link|http://www.cs.arizona.edu/icon|Icon].

Icon has a function called proc() which can return a function pointer to any function and operator - built-in or otherwise. With such a reference, you can call everything with a function call syntax. I imagine you could even do something like this:
assign := proc("=", 2);
plus := proc("+", 2);
...
assign(a, plus(i, j));
... or something like that.

Of course, this isn't how the language usually works. The facility is there because all identifiers of built-in procedures and functions can be re-assigned to custom functions. The proc() function is then capable of retrieving the real ones, when you then need them. The book warns that there are a small number of control structures that look like operators but really are not - they cannot be retrieved using this function (which means things like if-then-else can't be, either).

Wade.