I am sure there are folks who have faced this situation, unfortunately I could not find any literature on how to resolve it.
When I make updates to my theme and release it on WP as a new version, users can upgrade through their control panels. However, I would like the upgrade to not touch certain things like a custom.css file or a folder for header images etc. In other words, if my theme is called "my-theme" and its directory is wp-content/my-theme, I would like to overwrite things like wp-content/my-theme/style.css, but not wp-content/my-theme/custom.css.
What do I have to do so that certain files / folders are preserved? Is there some kind of an action hook for this or is it much simpler?