1. Yes, you should add a VRIK to each of the characters, but the IK targets you assign to it would need to be parented not directly to the HMD and hand controllers, but proxy objects that follow the HMD and hand controller local positions/rotations by script. Basically just transform.localPosition = targetTransform.localPosition; and the same for the localRotation. Using local space here so you could offset the proxies to the position of each character.
2. You could play around with some VRIK settings to change the appearance a bit, but about the lag, you could write that into the script above that updates the proxies, I mean you could use transform.localPosition = Vector3.Lerp(transform.localPosition, targetTransform.localPosition, Time.deltaTime * speed); and have the speed parameter vary between the characters to make some lazier or slower or apply positional offset to the hands or whatever.