Below you'll find the method I wrote myself, but it is terribly slow compared to this one, adapted from halmir's code here, so I will give the fast version first and post my own code below. See halmir's post for an explanation,
ClearAll@graphToMesh
graphToMesh[graph_?PlanarGraphQ] :=
Module[{nextCandidate, m, orderings, pAdj, rightF, s, t, initial,
face, emb, faces},
emb = GraphEmbedding[graph];
nextCandidate[ss_, tt_, adj_] := Module[{length, pos},
length = Length[adj];
pos = Mod[Position[adj, ss][[1, 1]] + 1, length, 1];
{tt, adj[[pos]]}];
m = AdjacencyMatrix[graph];
Do[pAdj[v] =
SortBy[Pick[VertexList[graph], m[[v]], 1],
ArcTan @@ (emb[[v]] - emb[[#]]) &], {v, VertexList[graph]}];
rightF[_] := False;
faces = Reap[Table[If[! rightF[e], s = e[[1]];
t = e[[2]];
initial = s;
face = {s};
While[t =!= initial,
rightF[UndirectedEdge[s, t]] = True;
{s, t} = nextCandidate[s, t, pAdj[t]];
face = Join[face, {s}];];
Sow[face];],
{e, EdgeList[graph]}]][[2, 1]];
faces = Most[SortBy[faces, Area[Polygon[emb[[#]]]] &]];
MeshRegion[emb, Polygon[faces]]
]
Applied to the original graph,
graphToMesh[gvoronoi]

These examples all run pretty quickly,
{#, graphToMesh[#]} & /@ {HararyGraph[4, 8,
GraphLayout -> "PlanarLayout"], GraphData[{"Antiprism", 13}],
GraphData["ZamfirescuGraph48"]}

Old, slower answer based on RegionIntersection
The previous answer I had posted seemed to work for any mesh region created from a VoronoiMesh but would fail for other types of graphs. This method is slower but more robust. It seeks to the minimal basis of non-overlapping regions in a graph, using the function graphToFaces described here
graphToFaces[graph_?PlanarGraphQ] := Module[{graphpoints, cycles, polygons, n},
graphpoints = GraphEmbedding[graph];
cycles =
Polygon[graphpoints[[#]]] & /@
FindCycle[graph, Infinity, All][[All, All, 2]];
cycles = SortBy[cycles, Area];
polygons = {cycles[[1]]};
n = 2;
While[Length@polygons < Length@FindFundamentalCycles@graph &&
n <= Length@cycles,
If[
And @@ (Area[RegionIntersection[cycles[[n]], #]] === 0 & /@
polygons),
AppendTo[polygons, cycles[[n]]]
];
n++
];
First /@ (polygons /. Thread[graphpoints -> Range@Length@graphpoints])
]
graphToMesh[graph_?PlanarGraphQ] :=
MeshRegion[GraphEmbedding[graph], Polygon[graphToFaces[graph]]]
Here it is applied to six random Voronoi mesh objects,
Table[pts = RandomReal[1, {5, 2}];
voronoi = VoronoiMesh[pts];
gvoronoi =
AdjacencyGraph[voronoi["AdjacencyMatrix"],
VertexCoordinates -> MeshCoordinates[voronoi]];
{voronoi, graphToMesh[gvoronoi]}, {6}]

In each result above, the output is identical to the input mesh.