The main problems I see with this approach are discoverablilty and unexpected behaviour. Unless someone is told how this works it won't be obvious upon viewing the page that you can select text to view a definition. It also breaks standard expected behaviour in the browser, where selecting text merely highlights it for copying.
It kind of reminds me of touch gestures in iOS apps, some of which are hidden away and not revealed until you start swiping around with your finger. Many users will be totally unaware that they exist and may only find them by accident.
In my experience I've found the simplest solution to always be the most usable. In this case, why not have a small form comprising of a text box and "Define" button?
- When the user selects text on the page the text box is populated with that text, leaving the user with the freedom to still select text on the page without it being transformed into a link.
- It eliminates the need for an "undo" function, since the user can simply amend the text box contents if they weren't precise enough with what they selected.
Alternatively you could tweak your current approach to automatically float a "Define" button besides any text selected on the page, which would be a little more usable than creating a link that cannot be removed, but you would still have the same discoverability problem as before.
As far as I can see, everyone wins with a simple interface.