The rope is made up of of a string of low-mass circular colliders joined with PinJoint2ds. We had to switch to the Rapier physics addon to make it stable. Rapier also has a RopeJoint2D that we used for the first and last joint (to the harpoon and player, respectively). It sets a maximum separation with free movement.
Unfortunately, some of the movement jank is because to make all of that work, we have to make the character a RigidBody instead of a CharacterBody. To make that better either the RigidBody controls need to be dialed in, or we would need to develop a system that uses a CharacterBody (hard, because it doesn't respond to forces).