Solved it myself!
So the image data that imshow displays is the exact data I should be changing:
data = rand(RGB, n, n)
g = imshow(data)
data[1] = RGB(1,1,1) # update the image data
Now nothing has yet been updated in the window, so I need to fake an update event. I do this by:
zr = g["roi"]["zoomregion"]
push!(zr, value(zr).currentview)
and it works!