At the moment Scala is a very "naughty" language that tries to push the limits of the JVM. I have mixed feelings about it, but it's a real mind bender.
PROLOG is one of the most abstract languages I've ever used. It's quite old, but basically what you write is very loosely coupled with what actually runs. It is way more abstract than any notion of classes and pointers... Even the order of the commands (the instruction register?) is decoupled from how you write your code. Although it is not heavily used in the industry, it is very well studied in Academia. If you want to experience highly abstract code, try some Prolog.
I've also heard interesting things about ERLANG. (never used it).