The story is not so important for this question, but here it is: the GPRS modem is locked-in to the vendor's software (it doesn't work, if it doesn't receive a correct response to a "challenge" it prints from time to time). To use it under Linux, someone has reverse-engineered/disassembled that code, and now there is a daemon-like program which scans for the device to appear and then starts sending special commands to it. The source of this program has been lost, so we cannot rewrite it.
If the daemon is run before NetworkManager starts connecting, NetworkManager fails because of some access conflict. If the daemon is run after the PPP connection has been established, the connection is broken (probably because it interferes with it, at the initial stage, perhaps.) But I've found out that if the daemon is started and then pppd is run manually, everything works fine.
But people use NetworkManager.
How does one make NetworkManager run another program before pppd for a specific connection? (I know a hack to do this for any connection: simply substitute the pppd binary with a wrapper! Perhaps, it's even not so bad, except for intruding into a distro's package, which means that our wrapper would be overwritten with a package upgrade.)
A simpler question: How does one make NetworkManager use another program instead of standard pppd (without replacing pppd at its standard location)?
A harder question: How does one make NetworkManager run this special program if it is going to use some defined model of GPRS modem?