It should not matter about the carrier. Apple APIs between devices should detect failure at a higher level than the carrier.
For example:
1. Apple server sends message or notification.
2. Apple server waits for acknowledgment from the user device of successful message transmission.
3. After some time, with no acknowledgement, Apple server sends message or notification again.
4. Rinse and repeat a few times, then notify user via an alternate channel like email. Its not like Apple's walled garden does not know who the user is.
For devices replace the above "Apple server" with "Apple device".
The API is not difficult, but Apple would rather lose the message than report an error. That type of API design started with Jobs and his "it just works" philosophy and is deeply rooted in Apple's software. Anyone that studies the APIs can see it.