The theme is just a css file. When you choose a new theme you will load a new css file. The css theme files should be designed to override the original theme as that css file is still loaded.
Your other option is when a new theme is chosen, you reload the blazor app via location.reload() and pass the themeid as a query string parameter. This probably the most common website approach as the style tree will be smaller and faster.