Start here. This is the direct spoken answer to practice first.
Overview
Effect Events solve a narrow stale-closure problem; they are not a general escape hatch from reactive dependencies.
A value stays in the dependency list when changing it means the external synchronization must rerun. I use useEffectEvent for logic called from an Effect that should read the latest props or state without making the Effect resubscribe. For example, changing a room ID reconnects a chat, while changing the current theme only changes the notification shown after connection.