Windows is not a real-time system. Very few desktop systems are. Thus, it records a buffer while it does something else, then processes that buffer all at once, and plays it back out while it does something else again. That's where the delay comes from.
It doesn't sound to me like you're describing this, but if it were out of sync on the stream or recording, then the Sync Offset control in the Advanced Audio Properties would fix that. Bigger numbers make the audio come later, and small negative numbers work too, by eating into OBS's own buffer with the associated risks of having a smaller buffer on a non-real-time system. Otherwise, trial and error.
If you want your headphones to be instant with the mic, then you need to bypass the non-real-time general-purpose system entirely. Probably a physical console, with the mic going to the console and the headphones coming off the console. The console also feeds OBS. Best then, to get a *good* console, and have as much as you can running through it, so that OBS has only one audio source at all, completely finished from the console, to pass through unchanged.