J2ME is used a lot in embedded systems for factory control, automotive systems, network aware measure equipment, copiers, ...
Edit: forgot to mention that in the mobile area it is actually sad, specially with Oracle pushing ADF Mobile instead. So back to C++ for multi-platform code.
The first app was a general purpose data collection app. It was purely data driven. I could define a template on our server which defined what fields you wanted information for, the type of field (text, number, list selection, etc) and if it was geo enabled. This would be sent out to the phone, and a user could enter the information, send it up to our server and view it on a map. Doesn't sound to exciting, but you could pretty much create a template for anything, This was before google maps, so we also had to manage the shapefiles and handle displaying and rendering them on our website.
The other app was a payroll app for harvesting crews. We could set up the crew members on the server, they would get downloaded to the phone where we used a bluetooth card reader to scan them in/out. Also added some bluetooth printing.
Overall, you could be productive using J2ME. It was just all the stuff that went with getting it out to users.