Here's the problem: only JPEG and the highest quality setting is really bad. I put an 8GB card into the camera and the display suggested I could take over 1,000 pictures (1,200?) on the highest quality setting! Viewing the images in Photoshop at 100% (and getting packed to leave for the trip to CR) my jaw dropped - nasty poor quality images - they look "shaggy" and scruffy in large areas
That's because a 8 GB card is large. A totally uncompressed 8-bit RAW image at 4000x3000 only requires 12 MB (11.4 MiB) and you could fit 682 of those on that card. Judging from this comparison, I'd say your camera's finest JPEG quality compresses very lightly and there is likely no room for improvement there.
Your JPEGs have 12 million RGB pixels (when decompressed there is 24 bits per pixel, 8 for each color), but the source RAW image doesn't. It only has 12 million single color pixels (most Canon compacts use 10 bit RAW data from the sensor, ditching two bits in developing the photo to a JPEG). Your camera decides the three color components for each pixel from surrounding pixels sensitive to each color (see e.g.
http://en.wikipedia.org/wiki/Bayer_filter).
In other words, your camera does not have 12 million red pixels, and it's sensor resolution is not that high either. It probably has 4 million red, 4 million blue and 8 million green pixels. That's how digital cameras are built, until someone invents something superior. So, when you look at a typical 1:1 scale image from a digital camera, it will not look sharp even if it was never subjected to lossy compression. If you want a sharp image, you will need to scale down. Your camera can do that for you on the fly, but many prefer to do it on a PC for the greatest achievable quality.
On top of that, 12 million pixels is a huge amount for such a small sensor. There will be lots and lots of noise unless you have lots and lots of light. 12 Mpixel is possibly near the theoretical capabilities of the lens too (let alone practical since it's of course an inexpensive one), meaning that the lens may not be able to project light to the sensor accurately enough. I believe that especially with narrowest apertures you will surely exceed physical limits of resolution.
Nothing a firmware hack to fix there.