As a software engineer, the built-in programming language turned out to be the most useful feature of all. The programming language is a small variant of Basic, most similar to the TinyBasic some of us used at the dawn of the microcomputer age. It is a very minimal language, including the normal control structures (for/next, if/then/else, etc) and a maximum of 26 variables (named a-z).
One nice feature of the built-in Basic is the ability to trigger every user-interface control on the camera, allowing you to drive the camera as you would use it manually. One of the macros I use the most allows me to take a sequence of photos, both under- and over-exposed, which I then reassemble in software to obtain high dynamic range (HDR) photos. This type of photo brings out all details that would normally be in the shadows or washed out due to too much light.
There are several different versions of CHDK. The standard version works on most camera models. One version specializes in helping you make stereo photos, while another incorporates motion-detection features to let the camera trigger itself when its view changes.