Just stabbing in the dark here, but can you figure out what
usbmodeswitch actually causes the kernel to do, and then make your
modem driver module cause that itself?
Assuming of course that you can figure out how to make the modem
driver module claim the cdrom-mode version of the device, before some
mass storage or cd builtin driver grabs it.
It seems to me that what those desktop linux userspace mechansisms are
really doing is providing a means of telling the kernel to do some
simple operation on a specific usb device - but there are less general
purpose ways of telling the kernel to do stuff - like building it into
your driver, or building a driver that just pushes the right internal
kernel buttons when insmoded, or making a control device file and
calling an ioctl on it, or...
I would assume you could probably also set the configs to build udev
and various other full-featured linux bits perhaps? not used in
android (phone) kernels - but I suppose there might be compatibility
problems with android style power management or something.