I use my own DNS server to host my domain, running on a VPS.
I use tinyDNS, but any authoritative DNS server would work as well.
It is generally considered to be a really bad idea to have a single DNS server but all the data I serve from that DNS server is on that same server, so it doesn't bother me -- one thing fails it all fails. Needless to say, this isn't 'best practices' for anything.
If you do this you may need to fake out registrar. They typically want 2 different name servers so I've told it to use ns1.example.org and ns2.example.org that both happen to have the same IP address. Also make sure the names you tell your registrar (which become glue records) the same information that you have in your server's DNS.
Also, you'll need to have a static IP address somewhere.
Again, it works but it isn't the best way to do it.