Well, I already mentioned the Module system part.
Good point on the Formal definition compromise.
But I think laziness-by-default has some fundamental advantages that SML pretty much loses: http://augustss.blogspot.com/2011/05/more-points-for-lazy-ev...
I don't think there was any compromise here, just a different choice of default. Both offer a great deal of control over what evaluation method to use.
Haskell, for what it's worth, compromised on:
* Formal definition - this is an often-overlooked win for SML, and the sort of thing that lots of languages could use.
* Module system - type classes complicate this problem, but the lack of a decent module system hurts Haskell when building large systems.