Each Bmesh Face has it's loop of vertices. You get to the UV coords through them:
uv_layer = bm.loops.layers.uv.active
for face in bm.faces:
for loop in face.loops:
print(loop[uv_layer].uv)
There is no UV Face Index, this is all that is exposed from python API. You don't get access to what is displayed in UV editor.
You can make your own class of UV_Face and populate an array with it. Each UV_Face will carry the index of Bmesh face and UV coordinates of its vertices. Then you can calculate a median center for each UV_Face and sort the array based on that to have it in left-right top-down order if you need.
If you need UV islands, you will have to match UV coordinates of same values, see what UV_Faces touch at least in an edge, and construct the islands from there.