Here is a straightforward way to accomplish your goal. I've described the approach but you'll have to tweak the constraints and driver to match your desired movement:
In this example, the 4 bones in the Z chain represent the object you want to curve. They are chained and connected:
Bone is the parent of
Bone.001 is the parent of
Bone.002 is the parent of
Bone.003. There's nothing special about it being 4 bones, that's just a convenient number.
All of the bones have a Copy Rotation constraint to copy the rotation of their parent, except
Bone. The idea is that rotating
Bone will cause each of the other bones to rotate as well, creating the arc:
This is the constraint applied to
Bone.001. It has the default settings, except that both Target and Owner are set to Local Space. Since we are rotating the bones on their local Z axis, we could lock out the X and Y axis in the Axis setting, but I didn't bother.
The technique for getting the bow right is to set the Influence of each bone so as to achieve the result you want.
Bone.004 is meant to move along the world X axis (its local Y axis.) Its Y location is used in a driver that controls the Z rotation of
This is a crude version of the setup.
Bone.004 is not reasonably positioned and should be placed where you want your control bone. The expression I used in the driver, $-location$, is not scaled properly or properly converted into radians to use for the rotation value.
But the above is the basic setup. Modify it by tweaking the constraint influence on each of the constrained bones and modify the expression appropriately and you can produce your desired curves.