Firstly, having nodes with the same name is not good practice. Rename the "ball" node with the constraint to something like "ball_grp".
Now, I would delete the parentConstraint and recreate it just to clear out everything. Before keying anything on the constraint, verify that it's working properly. Switch the weight from "0" to "1" at various frames of your animation. See that it's behaving in the expected manner.
Then start keyframing. One thing to note about keying a constrained node...in your case, a parent constrained node. Once you set a keyframe, you get "blend" attributes. The first thing I would do is to connect the constraint's weight to these "blend" attributes. This will ensure that the constraint and the keyframing are in sync. All you have to do is control the constraint weight and the rest is automatic. As opposed to having to also control the "blend" attributes.
Now, again, confirm that you are getting what you are expecting. Playback the timeline and verify that the "ball_grp" stays at the keyframe that you turn off the constraint. Once all that is working, now animate the "ball". I would suggest, recording the "ball" position in world space one frame before turning the constraint off. And then again the world space position at the frame when the constraint is turned off. This will allow you to construct your initial velocity of the "ball". You can snap the "ball" node to the 2 positions and set keyframes. Then set the anim curves' post infinity to "linear". Then scrub the timeline to see when the ball gets to roughly your desired destination. And adjust the position accordingly and set a keyframe. Then turn your post infinity back to "Constant". This should give you a smooth animation of a ball throw.
Hope that makes sense.