You don't have to build a javax.jms.Message object directly. Just use a JMS step, either the old or new one, and you can enter message properties individually in the step itself, along with the actual message payload. You can use {{...}} property references or {{=...}} scripts in any of those fields as well.
Your larger problem is that we don't really have good support for putting multiple protocols into the same VSM. It's doable, but there are tricks.
If your HTTP respond step runs first then it will clean up all the VSE response state and there will be nothing left in the testExec to build your JMS response. So you have to add your JMS step *before* your HTTP respond step. Note that if you try to use the JMS VSE Respond step then it will also clean up the VSE response state and there will be nothing left for your HTTP step, so you will have to use the regular JMS test step.
Once you have the step set up with the correct queue/connection information, you can just enter something like the following for the message body:
{{=testExec.getStateObject("lise.vse.response").get(1).getBodyAsString()}}
This assumes your "JMS" response is the second one in the VSI, leaving the HTTP step to send the first response when it's executed.
With that out of the way, you can enter values for the message headers/properties directly in the step, either hard-coding them for every response or using an expression similar to the above one to pull then out of the VSI response meta-data or some other source.