To be clear, I think your panning logic sounded great to me!
I noticed that you’re using Howler, so you may have less control over the sounds as you would with the Web Audio API, but there are some things you might consider to make it smoother. For example, there is a version of each sound for each channel (left, right, and center) and they stop and start whenever the player changes lanes. I would try to keep them playing, associating each obstacle with a new sound instance of the centered version, and change the pan of the instance itself when changing lanes. (Maybe you’ll need to tweak other parameters like volume and filtering too.)
The nice thing about this approach is how it would allow you to have four or five lanes instead. There’s more continuity! That could open a lot more possibilities in your game design. (This is based on a second read of your code, but you know it much better than me!)