From what I can tell the ToyVpnService is either an experiment or in a very early stage of development.
Yes, it's only used for UDP. They either don't care about lost packets at this stage or they plan to implement a control mechanism later.
In the messenger example that you provide, the apps exchange strings. They don't need to send any other info because they only want to display them. When you communicate with a VPN you have to send the headers so the VPN can forward any data it receives.