Well, I have the exact same Problem. I am bound to use a right handed coordinate system with a XY ground plane, as positions get synced to a 2d map and rely on geopositions.
but there are workarounds for that:
you rotate your camera 90° around x before everything else:
this.xOffset = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(1,0,0), THREE.Math.degToRad(90));
this.deviceOrientation = new THREE.Quaternion();
this.deviceOrientation.fromArray( pose.orientation );
this.objectQuat = new THREE.Quaternion();
this.objectQuat.multiplyQuaternions(this.xOffset,this.deviceOrientation);
you transform every pose you get by the following conversion:
var adjustedPos = new THREE.Vector3(
pose.position[0],
pose.position[2] * (-1),
pose.position[1]
);
being immutable doesnt necessarily mean it is hard to workaround. you just have to adjust the sensor data/pose. Although this might get messy when using the standingMatrix.