When the transform of a rigid body is changed, the physics integration of that frame is lost. Even just changing the origin's x value will lose the y and z velocity for the frame.
In the docs, it says:
If you only need to place a rigid body once, for example to set its initial location, you can use the methods provided by the Spatial node, such as set_global_transform() or look_at(). However, these methods cannot be called every frame or the physics engine will not be able to correctly simulate the body's state.
Changing one part of the transform is effectively the same as set_global_transform() being called (from what I can tell), so has the same issue.
(I tried debugging into the code to see where that happens, but scons is damn annoying)
One fix is to store the desired x position in a class variable instead of setting the transform directly in the event code. Then add this function:
func _integrate_forces(state):
state.transform.origin.x = mx
where mx is the variable with the mouse x pos. In my tests, that lets the linear_velocity continue working as normal.
Although I don't know if that's going to get the right node, I don't know your hierarchy. But doing that to a simple test fixed the issue for me.