* They're natively supported in most databases and languages
* They're strongly typed, meaning there's no risk of accidentally doing things that make no semantic sense with them (e.g. adding or multiplying)
* They ensure that any API user will use the correct datatype, rather than some clients breaking when your ids go above 2^31
* They avoid exposing information about how many entries they are, e.g. you can't tell how many users I have by signing up and checking your user ID
* The client can generate them without roundtripping to the database; this can save on roundtrips when you're saving several related pieces of data, and makes it easier to have circular datastructures if you need them
* As others have said, they're usable in an AP datastore
None of this is impossible to do with integers, but UUIDs make it very easy.