It is possible for you to control everything (expect No.3) yourself, the main things that stop people doing so are, cost, time spent setting it all up, security, maintenance.
At the very basics, you need a domain name, a computer that serves the data connected to the internet plus a Domain Name Server (DNS) that will link the domain name that the user types in to the IP of the computer that serves that data.
If you are using a host like godaddy for everything, then it simplifies things by setting up the domain name, nameservers, DNS settings, apache webserver settings, email, database and so on for you in a standard configuration. Making changes to this requires you to use their online interface but you can change just about everything, it's difficult to mess up completely and if you do mess it up, one email to support will reset everything back to the basics again.
You could set yourself up with a dedicated server or VPN and run your own nameservers, web server, email server and so on. If you add a manager system like cPanel/WHM or Plesk on to it then most of the major tasks are automated for you while you can still log into a command prompt and tweak settings. However, this is probably prohibativly expensive for you. I notice on other threads you complained that the $10 for a domain name was too high for you so the cost of running your own dedicated server or VPN is also going to be out of the question.
To create the same thing, like a dedicated server, at home, without the cost of web hosting, you run in to some complications. These can be overcome but you should be aware of the compromises. You need to have a PC connected to the internet 24/7. This needs to be installed with web server software such as Apache. And you need to make a small hole in your firewall so that the server can talk to the outside world. This leaves a little security hole so you must ensure you configure Apache correctly.
Another problem is that your home PC probably doesn't have a dedicated IP, you'll have a shared IP. This IP will change each time you connect. So you need to use a DNS setup that adjusts for this IP change. Something like dynadns.org will do this. It dynamically updates the DNS with your new IP each time it changes.
A thrid problem is that your home server PC can't really be used for anything else. If you used the server to download a movie clip, then your bandwidth would all be used up by the movie and people trying to reach the websites would get errors.
So although doing it all yourself might sound idea, it's either going to be very expensive or else very cumbersome to set up and slow to use.