With help from rm-rf, I was able to figure this out. The key lies in setting the ImagePadding the same for each plot, then combining them with Grid. 

(Does anyone use GraphicsGrid? It seems like a trainwreck to me, with wild amounts of spacings that you can get rid of by manually tweaking them, but they crop right back up when you try to scale the image to a larger size).

So with the data defined as

 xrange={8,19};
 yrange={6,16};
 twoDlist=Table[Abs[I/(\[Omega]1-14+I) I/(\[Omega]2-11+I)+(I/3)/(\[Omega]1-8+I/3) I/(\[Omega]2-16+I)],{\[Omega]1,yrange[[1]],yrange[[2]],.05},{\[Omega]2,xrange[[1]],xrange[[2]],.05}];

and the function defined as

	getMaxPadding[p_List] := 
	 Map[Max, (BorderDimensions@
			 Image[Show[#, LabelStyle -> White, Background -> White]] & /@
			p)~Flatten~{{2}, {3}}, {2}] + 1;
	combinedplot[data_, xrange_, yrange_, plotopts : OptionsPattern[]] := 
	 Module[{rightdata, topdata, dy, contourplot, rightplot, topplot, 
		padding, dimensions},
	 rightdata = Total /@ data;
	 topdata = Total[data];
	 dy = (yrange[[2]] - yrange[[1]])/(Length[rightdata] - 1.0);
	 rightdata = 
		Transpose[{rightdata, 
		 Table[n, {n, yrange[[1]], yrange[[2]], dy}]}];
	 contourplot = 
		ListContourPlot[data, DataRange -> {xrange, yrange}, 
		 ContourShading -> None, Contours -> 30, 
		 PlotRange -> {xrange, yrange, All}, 
		 ContourStyle -> 
		 Table[{Thick, Blend[{Blue, Green, Yellow, Red}, n]}, {n, 1/30, 
			1, 1/30}], 
		 Evaluate[FilterRules[{plotopts}, Options[ListContourPlot]]], 
		 PlotRangePadding -> 0(*,ImageSize->300*)];
	 padding = getMaxPadding[{contourplot}];
	 dimensions = ImageDimensions[contourplot];
	 rightplot = 
		ListLinePlot[rightdata, PlotStyle -> {{Red, Thickness[.04]}}, 
		 Axes -> False, PlotRange -> All, 
		 ImageSize -> {Automatic, dimensions[[2]]}, 
		 ImagePadding -> {{0, 5}, padding[[2]]}, PlotRangePadding -> 0, 
		 AspectRatio -> 5];
	 topplot = 
		ListLinePlot[topdata, PlotRange -> All, DataRange -> xrange, 
		 Axes -> False, PlotStyle -> {{Thickness[.008], Red}}, 
		 ImageSize -> {dimensions[[1]], Automatic}, AspectRatio -> 1/5, 
		 PlotRangePadding -> 0, ImagePadding -> {padding[[1]], {0, 10}}];
	 Grid[{{topplot, Null}, {contourplot, rightplot}}, 
		Alignment -> Bottom]];

The result is robust to changing the size of the image, or any other options for ListContourPlot. The following input 

	Grid[{{
	 combinedplot[twoDlist, xrange, yrange, ImageSize -> 250],
	 combinedplot[twoDlist, xrange, yrange, ImageSize -> 561, 
		BaseStyle -> 30],
	 combinedplot[twoDlist, xrange, yrange, ImageSize -> 561, 
		BaseStyle -> 30, 
		FrameLabel -> {Style[
		 "\!\(\*SubscriptBox[\(\[CapitalOmega]\), \(1\)]\)", 30], 
		 Style["\!\(\*SubscriptBox[\(\[CapitalOmega]\), \(3\)]\)", 30]}, 
		FrameStyle -> Thick]
	 }}]

gives this as output.
![enter image description here][1]


 [1]: https://i.sstatic.net/x5BDa.jpg