I think it was the extremely high storage quotas (for the time) and the fact that the UI was ajax’y and didn’t reload the whole page/frame when you clicked.
Spam filtering on gmail has always been OK, but it was fine (for me) on other products for many years before gmail came out. I doubt it was much of a differentiator, but who knows? Maybe the #1 provider before gmail really sucked at it or something.