Protect changes made to the theme when updating

You can do exactly that by creating Child Theme. It depends on specifics of theme you want to customize and amount of changes how complex will it be to implement, but it is definitely most solid way to implement customization and preserve update capabilities.