Also, maybe I misunderstand, but doesn't using Prolog limit you to the unification algorithm used? If you wanted to build something like the Cassowary constraint solver in Prolog would it be really easy or would you still need to implement the algorithm from scratch?
It can be -- and often is. Depending on the language, the syntax may not be as convenient as using Prolog directly.
What do you want to know? I have written a few thousand lines each of production-quality Prolog in two distinct projects. It works well if you know what you're doing, the problem domain is a good match, and you don't need to rely on bindings to loads of external libraries. If you don't know what you're doing, it's easy to write slow and buggy code.
Edit: and oh, almost forgot: http://docs.racket-lang.org/racklog/
Yep. Watson has been described as "mostly written in Java, with some chunks in C++ and some in Prolog"[1]. The Prolog is apparently mainly used for language parsing[2].
Also the open source UIMA[3] project is heavily used by Watson. UIMA started out as an IBM project called OmniFind (IIRC) and was later donated to the ASF.
[1]: http://www.drdobbs.com/jvm/ibms-watson-written-mostly-in-jav...
Compared to when DCG parsing was most popular ('70s-'90s), there are now more alternatives for easily working with grammars, though, including non-black-box approaches nicely integrated into languages, like combinator parsers in Haskell and LPeg in Lua. So it's not quite as unique today, though it's still a nice way to prototype parsers.