I ended up implementing it with jQuery.
I wrote an ASP.NET control that just contains a JS block as it's content and it retrieves the list of terms from the "Glossary" list, passing them in as an array into the jQuery Search Highlighter plugin.
After that I use a small function to attach a ajax request to each of the terms with the qTip tooltip plugin. That request passes the term to a service page that returns the content of the term in the list. It works rather well.
I wouldn't be too hard to extend this to be a module so the list to draw from is controlled via the admin page.
One thing I'm finding that would probably be helpful in future versions of sitefinity is to change all the collections that implement IList to IList<T>. This way we can run LINQ on them without first having to run Cast<T>() on them.
|glossaryList.Items.Cast<IListItem>().Where(x => x.Headline.ToLower().Equals(term.ToLower())).FirstOrDefault();
Changing to IList<T> still maintains 2.0 compatability and makes using LINQ over the API much easier.