Yes you can set up a computer at home to be a server and provide it to the internet. You don't necessarily need a static IP... but it makes things a lot easier and more reliable.
Typically when you have a public webserver, you can reach it by putting your public IP address in the address bar of a web browser. I can put 18.104.22.168 in by web browser to reach google.com. A static IP is useful because you won't have to keep updating the IP address that the domain name points to every time your IP address changes. DynDNS keeps updating the DNS record automatically whenever your IP address changes. This would let you host a website on some DynDNS domain even if you had a dynamic IP address. Essentially you can still host a website on a dynamic IP... but no one would be able to find your website on an ever changing IP. DynDNS and static IP's are two solutions to the problem.
If you have a normal home internet setup with a router, you would have to forward port 80 through the router to point to your server. Requests made to your router by its public IP on port 80 would be forwarded to port 80 on the web server inside your private network.
I don't think your ISP cares if you serve a website, but they usually keep upload bandwidth for residential customers low. This would prevent you from being able to provide reliable web services to millions of people at the same time.
I'm not 100% sure what web hosting companies use to serve websites, but I would expect that Red Hat Enterprise Linux is used quite often in combination with Apache. CentOS is a good alternative. I would personally use Ubuntu server for my home website since I am more familiar with it.