Using the OpenAL Soft mailing list I've got the answer I needed:
In FNA we do something like this, but it's probably not ideal (if not just incorrect):
I know for sure that this doesn't provide hard panning, but you probably didn't really want to do hard pans anyway. We do that work to keep things at the 1.0f distance, but if attenuation isn't required for your project, you can turn that off and possibly save some time/effort:
-Ethan
TL;DR: Disable the distance system with:
AL.DistanceModel(ALDistanceModel.None);
Then set the balance like this:
AL.Source(SourceId, ALSource3f.Position, balance, 0f, (float)Math.Sqrt(1 - Math.Pow(balance, 2)));
Basically creating a half-circle on the Z-axis to always keep the same distance from the listener while shifting the direction to the audio.