Well, this is just a workaround. Let's make a graph:
g = Graph@Table[i -> Mod[i^3, 300], {i, 1, 300}];
It looks like this:
GraphPlot[g, PackingMethod -> "ClosestPackingCenter"]

Let's break it into two components, distributing connected components of similar sizes equally between the two:
cc = SortBy[ConnectedComponents@UndirectedGraph[g], Length];
c1 = Flatten[cc[[1 ;; ;; 2]]];
c2 = Flatten[cc[[2 ;; ;; 2]]];
Now let's show them size by side:
GraphicsRow[
GraphPlot[Subgraph[g, #], PackingMethod -> "ClosestPackingCenter",
PlotRangePadding -> 0] & /@ {c1, c2},
Spacings -> 0
]

Not perfect, but might be good enough for a paper or presentation. This will only look good with the ClosestPackingCenter option but that is what you were asking for specifically.
Alternatively, you can use Heike's packing algorithm. I used the simplest version because it was faster, but you should use the updated version which produces vector images (it'll be a bit more work though).
images = ImageCrop@
Rasterize[#, "Image", ImageSize -> 50,
ImageResolution -> 4 72] & /@ (GraphPlot[Subgraph[g, #],
PlotRangePadding -> 0] &) /@ Reverse[cc];
padimg = ImagePad[#, 5, White] & /@ images;
iteration[img1_, w_, fun_: (Norm[#1 - #2] &)] :=
Module[{imdil, centre, diff, dimw, padding, padded1, minpos},
dimw = ImageDimensions[w];
padded1 = ImagePad[img1, {dimw[[1]] {1, 1}, dimw[[2]] {1, 1}}, 1];
imdil = MaxFilter[Binarize[ColorNegate[padded1], 0.01],
Reverse@Floor[dimw/2 + 2]];
centre = ImageDimensions[padded1]/2;
minpos = Reverse@Nearest[Position[Reverse[ImageData[imdil]], 0],
Reverse[centre], DistanceFunction -> fun][[1]];
diff = ImageDimensions[imdil] - dimw;
padding[pos_] := Transpose[{#, diff - #} &@Round[pos - dimw/2]];
ImagePad[#, (-Min[#] {1, 1 }) & /@ BorderDimensions[#]] &@
ImageMultiply[padded1, ImagePad[w, padding[minpos], 1]]]
fun = Norm[{1, 1/2} (#2 - #1)] &;
Fold[iteration[##,fun]&, padimg[[1]], Rest[padimg]]

Most of the code here is directly copied from her post.
If we make some effort to preserve sizes as well, we get this:

I used this code to generate the images for this (with some manual tweaking):
plots = GraphPlot[Subgraph[g, #]] & /@ Reverse[cc];
images = ImageCrop@
Image@Show[#, PlotRange -> 2.5 {{-0.1, 1}, {-0.1, 1}},
ImageSize -> 100] & /@ plots;
padimg = ImagePad[#, 5, White] & /@ images;
Method -> "ClosestPackingCenter"... $\endgroup$