Under normal system operation all messages will be delivered to a connected client. We don't provide an absolute guarantee as a message delivery could be failed by many reasons. We continually test the live system on all clusters by continually publishing and receiving messages. We record the latency as well as any dropped messages, so we can ensure that the fraction of high latency/dropped messages is minuscule.
The most likely scenario for missing messages is when the client is temporarily disconnected (e.g. because of network issues). You can be notified of this by binding to the connected event - you could even make an ajax request to your app to fetch any missing messages when this happens. Please see http://pusher.com/docs/client_api_guide/client_connect#connection-states
If you need a guarantee that you haven't missed a message in the stream, you should generate sequential ids for messages in your app and check in the client that they're arriving sequentially. Additionally, you can store the messages on your server, and the client can request any that were missed.