having the GSM/3G modem as an external (proprietary) device is nice and ok for many people, _BUT_ at that point the interface to that device needs to be publicly documented/specified.
For old GSM/GPRS devices it typically was a serial line with AT commands and a 3GPP-specified multiplex protocol (TS 07.10). In that case, anyone could write code to drive that modem.
But the modern high-end 3G chipsets typically have proprietary RPC interfaces that are running on top of a dual-ported RAM of some sort. So you end up having proprietary components speaking a proprietary protocol to a proprietary GSM/3G modem, rather than _only_ a proprietary modem.