You may be able to use the roCompositor and roSprite to do what you want. If your hud thing has its own bitmap, you can set up a compositor that writes to your main region via a sprite that reads from a hud region mapped on to your hud bitmap:
Sub Main ()
port = CreateObject ("roMessagePort")
screen = CreateObject("roScreen", TRUE)
screen.SetPort (port)
screen.SetAlphaEnable(TRUE)
mainR = CreateObject("roRegion", screen, 32, 8, 600, 400) ' leaves enough room for overscan [changed dimensions to fit in SD screen]
mainR.SetAlphaEnable(TRUE)
hudBitmap = CreateObject ("roBitmap", {Width: 290, Height: 116, AlphaEnable: False})
hudR = CreateObject("roRegion", hudBitmap, 0, 0, hudBitmap.GetWidth (), hudBitmap.GetHeight ()) ' Draws to hudBitmap
hudR.SetAlphaEnable(TRUE)
compositor = CreateObject ("roCompositor")
compositor.SetDrawTo (mainR, &h404040ff)
sprite = compositor.NewSprite (200, 100, hudR) ' 200, 100 is the position relative to your mainR origin where the hud bits will go
drawBox(TRUE, 0, 0, 74, 74, 5, &h008100C0, &h00FF00FF, hudR) ' writes box in the hud bitmap at position 0, 0, relative to hud bitmap
compositor.DrawAll () ' The compositor will take the contents from the sprite's region (hud bitmap) and put them on the compositor's surface (mainR)
screen.SwapBuffers ()
Wait (0, port)
End Sub
FUNCTION drawBox(bck AS BOOLEAN, x, y, w, h, thk, color, bckColor, drawTo)
' trig by drawHealthBar(1), drawScrollbar(1), drawSwapMenu(1), drawText(1), drawGenMenu(1), drawControlsPreset(1)
' bck: background, w: width, h: height, thk: border thickness, drawTo: region/bitmap/screen
drawTo.DrawRect( x, y, w, thk, color ) ' border top
drawTo.DrawRect( x, y+thk, thk, h-(2*thk), color ) ' border left
drawTo.DrawRect( x+w-thk, y+thk, thk, h-(2*thk), color ) ' border right
drawTo.DrawRect( x, y+h-thk, w, thk, color ) ' border bottom
IF bck THEN drawTo.DrawRect( x+thk, y+thk, w-(2*thk), h-(2*thk), bckcolor) ' background (inside border)
END FUNCTION