Looking at the documentation of PlaySound() on MSDN it states:
The SND_ASYNC flag causes PlaySound to return immediately without waiting for the sound to finish playing.
The conclusion from this information, although not explicitly stated there, is that PlaySound() waits for the sound to finish playing, if the SND_ASYNC flag is not specified. Therefore the lag you experience when playing a sound has not to do with OpenGL but with the fact that PlaySound() just waits for the sound to finish before it returns, thus blocking the calling thread.
So the proper code for non-blocking (i.e. asynchronous) sound should be:
PlaySound(TEXT("explode.wav"), NULL, SND_FILENAME | SND_ASYNC);
If you want to stop an asynchronous sound before it is finished, use
PlaySound(NULL, 0, 0);