Just wanted to chime in here and say that if you want to assign a value to a 'qual' element, using an assignment rule or initial assignment is clearly the correct approach. This was not possible in SBML L3v1 (when the original qual spec came out), but it is possible in L3v2, as long as the spec defines the element as 'having mathematical meaning'.
Arguably, the qual spec *does* already define various elements as having mathematical meaning, as it explicitly states that their IDs may be used in MathML. It also notes that you can't use the IDs in L3v1 core elements, but while that's true, it doesn't preclude the use in L3v2 (which, again, didn't exist when the spec was written.)
The upshot is that it shouldn't take too much effort to come out with a revised version of the qual spec that mentions l3v2, and explicitly states that you can use various IDs in math, and as the target of rule SIdRefs.
At that point (or in parallel), software will have to be written/updated to actually make use of the newly-defined capabilities, and libsbml updated to not record the error you found.
But in general, while all this may take some time, I really can't see any other way this could progress: as you noted, this is what the group wanted originally, and they only scaled back because of the limited capabilities of SBML l3v1. So for now: encode your models the way you want, and the rest of the world will catch up soon ;-)
-Lucian