For a real educational experience, rebuild gcc so that it only links against uClibc. Runs the full development platform in the target environment.
Manually take apart the build process and do it yourself (build without libc, rebuild using previous build against uClibc, rebuild bintools, rebuild gcc).
Rebuild automatically using scripts from Erik Andersen.
Build Usermode Linux, dump busybox and uClibc into a loopback file and run everything as a simulation. The kernel is a bit bigger (or much bigger with all debugging in) than a normal kernel, but it is pretty close to real.
Build a small web server such as thttpd (also busybox comes with a tiny web server).
Build a small X server. Investigate NanoX, which runs poorly (slowly) in an XNest server, but it's tolerable for development.