In Rebol, any built-in function can be overridden. You really redefined the set function above.
However, when you see the error you received, you should examine the throw-on-error function. You would know that in the source code of the function there is a call to the set function, which looks like this:
set/any 'blk try ...
This call assumes that the throw-on-error function assumes that the set variable refers to the function with the /any refinement. Since your overridden version of the function does not have such a refinement, the throw-on-error function cannot call it that way and therefore the error you received.
You can usually redefine something, but you must take responsibility for redefinition, especially if the redefined version is not backward compatible with the original.
source share