So far I've done Matlab R14sp1, Mathematica 5, the PGI compiler suite and RealPlayer. (OK, RealPlayer was already an RPM but doing everything in a postinstall script is pretty nasty.)
How do others handle patches? I use Lugaru Epsilon (http://www.lugaru.com/) and each patch shows up as a new package that can be applied to any previous version within a major version branch. But I don't think there's much prereq stuff enforced. And a lot of work is done in %post to set up symlinks in /usr/local/bin and install the .info file.