Here's the way I see it: there are a lot of customers who don't need all of the AWS services. They also would prefer to be running on bare metal for performance reasons, and to have slightly more control over their application. I know AWS with the nitro instances are closing that gap, but packet was around before they had those.
Also, their provisioning software is excellent. From the time you choose to deploy, it takes only about 30 to 45 seconds for your instance to start. I know AWS is faster, but AWS isn't installing a new operating system each time. as the other posters pointed out, they have a lot of features that AWS will also not let you do, like bgp with ecmp.
lastly, they tend to have newer types of instances that other providers don't that you can play around on. The cavium arm processor comes to mind, which I haven't seen on any of the major cloud providers.