I'm not quite sure how it handles network changes, but Conversations has worked well for me even on trains and cars in the last 2 years. Maybe this? https://xmpp.org/extensions/xep-0198.html
Yes, XEP-0198 is how reconnects (network changes, train tunnels, etc.) are handled. When the client reconnects to the server they exchange where each received up to before the disconnect and each side resends anything that was dropped.
This blog post covers some more recent improvements at https://blog.prosody.im/fast-auth/ - it makes XMPP (and therefore Unified Push) even smoother on lossy and high latency networks.