I have a Huawei E160 3G modem but there seems to be a problem with USB that makes it just drop any 3G connection when you try to actually download something (while GPRS / AT commands for SMS, etc. work fine, and it works fine if you do nothing but ping but as soon as you, say, try to download a HTML page, PPPd complains the modem hung up). I'm pretty sure it's a USB issue but the only debugging on the USB "packet acknowledged but not passed on to software" issue is being done by a small handful of forum users and getting no interest from the RPi team at the moment (not even assigned to anyone on Github, nobody "official" has replied to the debugging thread, etc.).
That said, there's no reason it *couldn't* work. If the RPi wasn't dropping my USB packets, it would work just fine (I know, because I ported an in-car linux PC that I made on a x86 Mini-ITX machine that used a 3G stick for lots of things - there's no reason that a RPi can't just run the same scripts / software that I used). And I didn't have to compile any modules or use wvdial for it to work (as others point out, wvdial isn't available for ARM and it's NOT just an easy fix to make it work, and you can dial AT commands with an old-fashioned send-expect dial script quite easily).
But it works, and if I leave it on GPRS mode it works fine. It's only the USB issue that affects it and that affects several other devices / people as well on completely unrelated things.