If you are talking about a webserver with static content only I'd definitely go for lighttpd.
To distribute the load (if indeed necessary) in the first place I'd choose a simple DNS round robin solution, keepalived and/or LVS can come into play later if that is really necessary.
You might also want to look into the several options that tune your IP stack with sysctl before throwing more hardware at it.
If you need to have more than one box I'd use rsync in combination with inotify, so that when you update your "master box" rsync will immediately push out the changes. I'd definitely try to avoid NFS since it would introduce a single point of failure (if not made highly available with some HA technique) and adds yet another layer of network interaction and latency.
The rsync and inotify approach would of probably require a fair amount of scripting but it would keep race conditions where customers want to download a file that is not yet synced to the web server in question to a minimum.
The part saying
I am doing this for a hosting company, it may be overkill
got me thinking. Why not run a BitTorrent tracker and let the CDN build up itself? Or is using HTTP a hard requirement?