Domain names can be bought through any number of resellers, good UK based ones are http://www.123-reg.co.uk and http://www.ukreg.com.
UK domains are looked after by Nominet. Each reseller (like 123-reg) has what is known as an IPS tag (123-reg uses HOSTEUROPE). You can see this by doing a whois search on a .uk domain (http://www.geektools.com/whois.php).
US domains (.com .net .org) may be looked after via any number of registrars. For example 123-reg uses one called OpenSRS, another is NetworkSolutions (actually owned by Verisign) who confusingly also sell direct to the public.
UK domains can be easily transferred by changing the IPS tag associated with it, it is also wise to change the email address associated with the domain to one you have access to. US and other TLDs need their administrative email address changing to something you have access to before they can be transfered.
In reality it's never this easy :) Usually this is down to the fact that the email address listed for the domain has not been changed or is inaccessible. Usually a reseller will change a domain on receipt of a fax signed by the original owner as proof of identity. Nominet also provide a service for .uk domains which (for a fee of £15+VAT) will change the details on a domain. This can be useful if an ISP has gone bust.
When you register a domain, and are setting up the hosting you will need an external dns or secondary dns - especially so when you have your own server.
In the past GraniteCanyon.com and secondary.org have been good providors of this service, for free.
If you're not sure why your DNS isn't working or are having problems you should definitely try putting the domain or host in question into an online checker like DNS Report or CheckDNS
If you get random errors on your site, or some people can't see it when you can, check that all your DNS servers are giving the same answers using Squish DNS traversal check.
Domain Name Servers (DNS) are the Internet’s equivalent of a phone book. They maintain a directory of domain names and translate them to Internet Protocol (IP) addresses. More information here
You can check that your site is working in its new location before the DNS changes have propagated. On Un*x/Linux edit /etc/hosts and add a line with the new IP address, a space, and then the hostname. On Windows do the same to C: /Windows/System32/Drivers/etc/hosts (don't ask why MS thought this was a good place to put it!). You machine will use these entries to convert the hostname into an IP address before asking DNS to do the job. Don't forget to remove the line a few days later once the DNS entries have propagated.