Well you can get the raw buffer and calculate the byte offsets for it and change it directly, alternativly you can modify it using imagepainter for convinience.
May I ask why you need to update a texture often? Maybee there is an alternative approach possible.
I would do it either with multiple quads and just materialized images for each item, and bear with the minimal overhead of updating to much data. For normal systems the preparing of the upload of the texture is way more expansive than the actual data transfer anyway.
Yes, I run the updates on a separate thread to which the results (modified buffered) are queued. The queue is then synchronized with the renderer to update the image.
The renderer phase just essentially transfers the buffers to the card.