CHD might be simple FAT16 or FAT32 on Windows-based arcade systems, maybe encrypted. But I'm certain all other systems will use a dedicated system. So basicly you have to figure out every CHD's format for itself and write an extractor accordingly. I could imaging a simple raw data cluster of 200 or 300 megabytes all kept together by a simple 32 bit pointer table in the first 128 kb of the image. Looking for headers of common graphics or sound formats in the image. Look for the headers.
Use an hex editor (a good one, these files are huge), load up your raw, search for "BMP", "PNG" or "WAV". Maybe you stumble across one of these formats (if your lucky). Then you just need to check the header information for the size of the file + header (it's almost always in the header) and extract it to a single file and go wild on it. You can even reinsert it again if the filesize stays the same.
In wrote a little program called HiColEd years ago that I used to find the background images in Killer Instinct's CHD. The KI CHD had no file system that you could use to extract so I had to find the graphics by looking through the who file adjusting the width and height of the output till a useful image showed up. It's tedious but you get a pixel perfect dump of the background graphics.