I always wondered what's the difference between making a separate unit and building a DLL?
Units are Pascal specific way to create modular programs, while DLL is language independent, but they have quite a lot of restrictions that you have to be aware of. The advantage of DLL is that the application is modular at executable level, meaning that when you need to update just some parts of your applications (to your customer for instance) they just need to download several small files, while in the case of units (which is integrated in the executable), they have to re-download the whole file.
Except for the extra file, why do developers do this?
As stated, it's to create modular programs. Modular programs allow people to work in team concurrently (except when a module depends on another), it also makes compilation faster since the compiler will only compile changed or newly added modules, it saves a lot of typing since you don't code the same thing again and again.