What Phaelax says applies not only to DLL's, but also data files.
If you write your program correctly, you can have it refer to many external data files rather than compile everything into a single exe file.
That way, updates can be done by allowing users to download patches which are simply replacement data files.
One simple example is having your game levels in a series of text files. Say there are 10 of them.
Instead of your program being written to load 10 levels, write it so it looks to see how many level files there are first. That way, you could easily replace faulty levels or even add another 5 levels - your program would automatically see and use them.
This method could be applied to almost any aspect of your program to a certain degree although actual program code changes would require a new exe to be supplied. That's the one aspect where Phaelax's suggestion is superior because DLL's contain functions which are used by the main program.
TDK_Man