Edit: My comment was slanted towards linux and I forgot to mention that maybe some familiarity with linux would be useful, but windows is also an alternative (usually more expensive).
1. Get an old computer and plug into router
2. Install ubuntu server
3. Buy your domain from namecheap.com and look up their documentation on dynamic DNS (assuming you are on a home net connection
I did self hosting for years (age 16 - 24) with the same K6-II box. Just recently retired it and use a VPS now, but I highly recommend doing it to anyone
Honestly this might work OK for a personal blog or something but is not a realistic approach to hosting anything with volume or for business purposes. Also you will still probably need to pay for SMTP service as there is almost no chance of anyone accepting mail from your self-hosted SMTP server when the reverse lookup resolves to an e.g. Comcast residential DHCP name.
I've personally never had issues with my ISP blocking it, but I read accounts from time to time (in this thread for instance) where people had issues with ToS enforcement. You'll have to evaluate your own situation, or just give it a shot until they explicitly react.
But you are right about email- it's a pain. Most likely you will have a bad time trying to get something authentic-looking working with a home ISP. Even doing it on a legit VPS is fairly complex.
Set up rkhunter and denyhosts.
Then, sit back and watch the logs as the attacks come in.
But with rsync, dvcs (I use hg), and even davcal (which I turned off for some reason I've now forgotten- I just use Google), life is pretty sweet.
My IP almost never changes (it's been the same for at least two years), but I still can't run an SMTP server off of it, since it's listed in Spamhaus' PBL[1], so many servers refuse my mail.
If you're in it for more than just the learning experience, hosting at home will probably give you bad/unreliable upload speeds (assuming you have a typical ISP). A VPS service like Linode or others would give you basically the same learning experience with the added benefit of a good connection.
https://github.com/boxen/our-boxen
It'll save you a lot of the configuration problems initially, until you're ready to configure.