A lot of RPM creation depends on how well the source package has been structured. For instance, you can build an RPM for the most recent spamassassin by downloading Mail-SpamAssassin-3.0.1.tar.gz and then running:
rpmbuild -tb Mail-SpamAssassin-3.0.1.tar.gz
That won't work on your average source package though. If a source package were set up properly for rpmbuild, it would probably include an "Uninstall" hook in the makefile too.
One method is to pipe the output from the installation commands (make configure, make, make install, whatever) into a file so you can check what was done and reverse it. Or just read the makefile.