I’m sure there is a more mathematical way to to do this,
But when I need a pivot point I usually add an object3d specifically for it.
Eg,
Create a neck,
add it to the torso,
and then change the heads parent from the torso to the neck.
Eg pseudo code, (I haven’t debugged or tested it works)
var torso = mesh0.children[0] // I am guessing here
var neck = new THREE.Object3D();
var head = mesh0.children[0].children[3] //according to your demo code
torso.add(neck)
neck.position.set(0,1,0) //another guess where it might be relative the torso
neck.add(head)
head.position.set(0,.25,0) //another guess where it might be relative the neck
scene.add(torso)
Now instead or changing the heads lookAt, change the necks lookAt.
Or maybe you can add a neck to your original 3d model, find that when your are traversing, and rotate that.
Sorry, I haven’t tested this, but you get the idea.
In my codesandbox example, I actually find the neck and change its lookat despite the naming of my variable as headRef.
Another way, is to change the origin point of your head object in your original model to be the bottom of the cube. You can do this in blender.