The main feature of curl, for me, is the ability to submit forms using the POST method. This means I can automate some things by script.
Another little nice feature is the interval syntax (like http://www.example.com/photo_[01-32].jpg).
However, the curl command-line syntax and behavior are not very good. If you just call curl, it will print progress info to the terminal, and will also send the output to stdout. In my opinion, it should, by default, save the file on disk. And, well, if I ask curl to save file on disk, I must tell it to use the same filename of the original file (-O option). If I pass multiple URLs, I must repeat this -O option for every one of them.
My complaint about this is that the most common use case requires passing many command-line options. In my opinion, curl should have sensible defaults.
And this is why I use wget most of the time: wget just works and by default will do what I want.
And I use curl only inside scripts to either download multiple files (but even then it is a pain) or to submit POST forms.