If the issue is with ray origin in perspective projection then maybe the solution is to do an orthogonal camera raycast? Not sure tho, I'd think there's a way to deal with it with perspective cameras just fine, probably just need to modify values before feeding into the raycast I guess. Mind, I haven't done the offset crosshairs thing for myself before, so I'm just guessing here.
https://docs.godotengine.org/en/stable/tutorials/physics/ray-casting.html#d-ray-casting-from-screen
In the example code given there I'd think it's the event.position
that might have to be modified(added to or negated from by some value corresponding to crosshair offset).
Since I expect you to want to raycast into your game world I'm assuming you to be doing the raycasting from the camera rendering the game world and not your fps hands/gun rendering camera(assuming I even remember correctly that you had 2 different cameras, right?).