Zustand brilla precisamente en el problema que describes. Evita los re-renders innecesarios porque los componentes se suscriben solo a las "partes" (slices) del estado que les interesan. Si el nombre de usuario cambia, un componente que solo consume el "tema" no se volverá a renderizar. Con Context, todo el que esté dentro del Provider se re-renderiza.
Para mí, merece la pena 100%. El código es más limpio, más performante y te quitas de encima el "provider hell".