I have worked in J2ME games development for two years and I can say that #1 is not off at all. There is no way around testing your application on all possible phones, because they all come with the weirdest bugs. For an example of what to expect: on some phones, PNG images show up broken if they are structured in a certain way (ie pixel dimensions not an even number or dimensions of image exceed screen size). Some method calls just crash the phone. Persistence might take forever or not work at all. Starting the application might take forever - on some phones it is slow if you load lots of small files, on other phones it is slow if you load fewer big files.
And it IS a pain to adapt to all possible screen sizes - granted, it might be a problem of designing the application, but as I was working on games, the design was often based on fixed size images. Especially as font support is crap with J2ME. Maybe flash for mobiles does a better job, haven't tried it.
Another thing that used to suck with J2ME: there is no standard for text entry, so it is difficult to integrate text entry nicely into your application. The only standard way is to switch to a blank screen that supports your phones text entry method, so you can't integrate it into your design.
Another problem, which I currently face: even if you know what phones you support, how can your customer know? Phones are usually not labeled with their technical name, so if you say "Nokia 6230i supported", it might mean nothing to your customer.
I wouldn't say it is impossible to make money with mobile applications, though. It seems also the price for mobile networking is falling.
Edit: the mobile games company I was working for was and is very successful and also in the meantime was bought by a big international entertainment company (think the Coca Cola of Entertainment). When I was there it was a 7 people company, so I think it qualifies as a successful startup (I think now they have 50 employees).