You dont NEED a static IP, but it makes the whole process so much easier:
I run several web servers at home, I have a type of ADSL internet connection setup called "No NAT" (No Network address translation) this allows me to have several internet facing static IP's (in my case I have 8 IPs, free with the connection)
I have my main ADSL Router (a Cisco one) set up as the main connection, this has its own internet IP, into that i connect my servers, all of which are directly addressable from the internet.
I also have an internal (normal with NAT) network router plugged into that for my home PC, laptop etc so that they are not exposed directly to the net.
Ok so you have your server plumbed in and set up, now you need a server application, in windows this is called IIS (Internet Information Services), or in Linux, it is generally Apache.
When you buy a domain name you do not need to buy a hosting package with it, you just buy the domain, and set the A record in its DNS settings to the IP address of your server.
When a computer on the net looks for a web page it asks its DNS (Domain name server) what IP that domain name is tied to (your server IP) and the browser then asks your server directly for that web content.
Your server (if correctly set up) replies with the website.