Unifying def and mac sounds akin to perpetual motion :)
Another crazy idea: use quoting to implement currying. When a function doesn't get enough arguments it simply evaluates what it gets and quotes what it doesn't get. When it has enough it evaluates the body.
Heh, I'm now expecting to find out that that is indeed how currying is implemented. Just replace quoting with some internal tag/annotation.
I actually proposed something similar a month ago with regards to currying (My idea was that "unwanted" parameters get curried by putting an underscore in their place in the param list. You idea may work even better- haven't thought through the details yet)