Here is a SparceArray version of Ali's second method which is expected to be more memory-efficient (at least for images of type "Real"):
{iW, iH} = ImageDimensions@img; Image[Total[ Table[SparseArray[ Band[1 + Round@{iH - #[[2, 2]], #[[1, 1]]} &@cm[[i, 2, 2]]] -> ImageData[newComps[[i]]], {iH, iW}], {i, Length[cm]}]]]

Procedural summation is even more memory-efficient:
Module[{sum = 0}, Do[sum += SparseArray[ Band[1 + Round@{iH - cm[[i, 2, 2, 2, 2]], cm[[i, 2, 2, 1, 1]]}] -> ImageData[newComps[[i]]], {iH, iW}], {i, Length[cm]}]; Image[sum]]

Image[Fold[Plus[#1, SparseArray[ Band[Round@{-cm[[#2, 2, 2, 2, 2]], 1 + cm[[#2, 2, 2, 1, 1]]}] -> ImageData[newComps[[#2]], Automatic], {iH, iW}]] &, 0, Range[Length@cm]]]

Here is how this method can be applied to a three-channel RGB image (the purpose here is to ImageAdjust the components of the image independently from each other):
img = Import["https://i.sstatic.net/U7zdU.png"]

m = MorphologicalComponents[img, .3]; cm = ComponentMeasurements[{m, img}, {"MaskedImage", "BoundingBox"}]; newComps = ImageAdjust@ImageMultiply[RemoveAlphaChannel@#, AlphaChannel[#]] & /@ cm[[;; , 2, 1]]

{iW, iH} = ImageDimensions@img; Image[Total[ Table[SparseArray[ Band[Round@{1 + iH - #[[2, 2]], 1 + #[[1, 1]], 1} &@cm[[i, 2, 2]]] -> ImageData[newComps[[i]]], {iH, iW, 3}], {i, Length[cm]}]]]

Combining everything into one function:
assembleComponents[newComps_, boundingBoxes_, {iW_, iH_}] := Module[{sum = 0, iCh = ImageChannels[newComps[[1]]]}, If[iCh == 1, Do[sum += SparseArray[ Band[Round@{iH - boundingBoxes[[i, 2, 2]] + 1, boundingBoxes[[i, 1, 1]] + 1}] -> ImageData[newComps[[i]], Automatic], {iH, iW}], {i, Length[boundingBoxes]}], Do[sum += SparseArray[ Band[Round@{iH - boundingBoxes[[i, 2, 2]] + 1, boundingBoxes[[i, 1, 1]] + 1, 1}] -> ImageData[newComps[[i]], Automatic], {iH, iW, iCh}], {i, Length[boundingBoxes]}]]; Image[sum]]
Usage:
assembleComponents[newComps, cm[[;; , 2, 2]], ImageDimensions[img]]
