Relative URL's have the advantage of allowing easier maintennance of sites, networks, and such.
If pages/links use relative URL's, then no matter where you physically move them, up, down, sideways, the links will always work, based on the first link/URL you called.
The hard thing is to stick with relative URL's and not let "hard" ones slip in.
The only "hard" url's I use are my /cgi-bin and /images and/or /assets type directories. These are directories that are either aliased on the main server, or I set up on each server I use, and they make configuration of headers, includes, and such much easier.
If you have a 'tree' of directories and pages, and you decide you want to group a bunch of things together to clear out the top-level a bit, you can just move them, change the link to that tree, and every other link in the tree would still work. This also allows moving from one domain to another, or going to IP based numbers from DNS, or vice-versa (such as in a test/development system).
As far as the DNS look ups go, if you watch how your browsers function, most do a lookup on a site the first time per session, then cache that DNS information locally for a period of time. They pick up a lot of speed that way.
It's also why if you make a DNS change to your servers, you often have to reboot windows, or at least reload your browser or network stack to get the new information recognized.
Relative URL's are great for moving within related trees, or groups of trees.
They start to fall apart if you use something like ../../../../../ to represent the "root" directory, when '/' is actually the correct way to represent it.
_BUT_ ../Cat_2 would be a proper way to go from one first-level category to another, since it would allow repositioning the categories at a level down.
Nothing is perfect, and no matter if you use hard or relative URLs, you will have to edit or change some links if you rearrange a site.
The advantage of relative URL's is that you almost always have to change far fewer links.
In a dynamically generated site, such as with a <%build_root_url%>, the issue is somewhat less important, since you can move your site just by changing that variable, and re-building. If you use relative URL's, then you can overlay a domain name onto a long path, or alias a long path to a short one, and the links are 'relative' to the starting directory, _not_ the path.
It takes a bit of planning, and thinking through the problem, but it can be done. You couldn't do that with "hard" url's, since a click on a hard URL would effectively toss you out to another server.
http://www.postcards.com FAQ:
http://www.postcards.com/FAQ/LinkSQL/