The normal way to resize a partition is to delete it (losing EVERYTHING on the partition), and make a new one of the new size you want.
That being said, a lot of programs will get around this for you, and although some consider the process to be hackish, I've never had a problem doing it. Partition magic is a commercial program that will resize partitions for you, and GNU's "parted" will also do it. I'd try booting into a live CD and running parted as root.
Just run "parted /dev/hda", where /dev/hda is your hard drive you want to repartition. Then type "print" at the command line to see the size of each partition on the drive. You can change the units it uses by typing "unit m", "unit G", "unit K", "unit %", etc.
Then type "resize x start end" where x is the number of the partition you want to resize (as given in print), start is a number in the given unit saying where you want the partition to start, and end is a number in the given unit where you want the partition to end.
You might want to check parted's documentation to find out what operations your filesystem supports (e.g. I don't think you can resize reiserfs, and changing ext3's start position of the partition doesn't work either), and make sure you understand everything before you go through with it.
AS ALWAYS, YOU SHOULD BACK UP ANYTHING IMPORTANT BEFORE YOU GO THROUGH WITH THIS. I've never had problems doing it, but I've only done it a few times, and your mileage may DEFINITELY vary. User error, software error, or hardware error : if just one happens in the right way, say bye-bye to your data.
That being said, after you've resized the root partition, you can create a new partition in the unpartitioned space, move the contents of /home over to it, and setup /etc/fstab to mount your newly created partition to the /home directory.