Well its a implementation detail of linphone´s core API I suppose. Keepalive is a TCP socket option the App has to set, and not smth that the OS takes care of for every connection. Also most of the Apps do not run in the background, so even with keepalive they might get disconnected since they cannot respond to the incoming packets.
Please talk with the Linphone guys about it, but as I understood there should be a working keepalive been set. Its just very likely that your NAT router ignores it maybe.