Here's a general primer, and I'd recommend searching StackOverflow for different specifics. There isn't a lot of game specific information beyond a discussion of game specific asset types or game specific operating systems (consoles, steam, etc.).
Just Assets:
So your images, sounds, models, animations, etc. are probably loaded as needed.
They may exist as separate files, in which case you can build a mechanism to update these files and possibly even force the assets to be reloaded while the game is running.
They may also exist as part of a package. A single file where the asset data is just part of the file as a whole. If this is the case, you need to be able to rewrite the specific data or accept updating the whole package file.
Code Updates:
Biggest issues here are permissions. If any application was allowed to download new code and run it there are a host of security issues. Normally in Windows there are some folders that you are allowed to place code updates for this reason.
Shared libraries, .dll files in windows. Break the code apart into smaller parts that are loaded as needed. Then you can replace those smaller .dll files.
Scripting engines allow you to essentially turn code into an asset. Instead of having to be compiled and loaded by the operating system, script just becomes text that can be easily changed.
This is a trade off of performance for ease of updates.
Conclusion:
It comes down to breaking the game into pieces, having a core set of code that handles updating those pieces and then loads and executes them.
There are way too many specifics to consider here, as well as a lot of existing solutions that could be leveraged, but I hope this gets you started.