There is nothing that dll can do that exe cannot, you can reference both. But EXE commonly contains UI elements and user interactions while DLL contains various helper functions: data access layer, data models, collections, resources etc...things only indirectly dealing with the application.
Each exe commonly creates its own process while DLL is loaded into the calling process.
The advantage of dll is that it can easily be reused in multiple projects - for example, if you create your custom textbox, by referencing that single DLL containing the textbox you can have the same custom textbox in all your projects / applications.
Here is
semi-formal definition[
^]