As usual, when something does not give away itself readily, make your own function from scratch. This topped barchart-like plotter I have built for my own purposes to visualize 5 dimensions of data: $x$ and $y$ position, $z$ height, bar color and top color. I also included the background of BarChart3D as back, but that can be omitted.
(* BarcChart3D background *)
vertex = {Directive[Opacity@.2, RGBColor[1/3, 1/3, 2/3]],
Directive[Opacity@.2, RGBColor[1/2, 1/2, 1]],
Directive[Opacity@.2, RGBColor[2/3, 2/3, 1]],
Directive[Opacity@.2, GrayLevel@1]};
back = {
EdgeForm@GrayLevel@0.85,
(* Bottom *)
Polygon[{Scaled@{0.015, 0.02, 0.02}, Scaled@{0.985, 0.02, 0.02},
Scaled@{0.985, 0.98, 0.02}, Scaled@{0.015, 0.98, 0.02}},
VertexColors -> vertex],
Polygon[{Scaled@{0.015, 0.02, 0.02}, Scaled@{0.985, 0.02, 0.02},
Scaled@{1, 0, 0}, Scaled@{0, 0, 0}}, VertexColors -> vertex],
Polygon[{Scaled@{0.985, 0.02, 0.02}, Scaled@{1, 0, 0},
Scaled@{1, 1, 0}, Scaled@{0.985, 0.98, 0.02}},
VertexColors -> vertex],
Polygon[{Scaled@{0.015, 0.98, 0.02}, Scaled@{0.985, 0.98, 0.02},
Scaled@{1, 1, 0}, Scaled@{0, 0.99, 0}}, VertexColors -> vertex],
Polygon[{Scaled@{0.015, 0.02, 0.02}, Scaled@{0, 0, 0},
Scaled@{0, 0.99, 0}, Scaled@{0.015, 0.98, 0.02}},
VertexColors -> vertex],
Polygon[{Scaled@{0, 0, 0}, Scaled@{1, 0, 0}, Scaled@{1, 1, 0},
Scaled@{0, 0.99, 0}}, VertexColors -> vertex],
(* Back *)
Polygon[{Scaled@{0.015, 0.98, 0.02}, Scaled@{0.985, 0.98, 0.02},
Scaled@{0.985, 0.98, 0.98}, Scaled@{0.015, 0.98, 0.98}},
VertexColors -> vertex],
Polygon[{Scaled@{0.015, 0.98, 0.02}, Scaled@{0.985, 0.98, 0.02},
Scaled@{1, 1, 0}, Scaled@{0, 0.99, 0}}, VertexColors -> vertex],
Polygon[{Scaled@{1, 1, 0}, Scaled@{1, 1, 1},
Scaled@{0.985, 0.98, 0.98}, Scaled@{0.985, 0.98, 0.02}},
VertexColors -> vertex],
Polygon[{Scaled@{0.015, 0.98, 0.98}, Scaled@{0.985, 0.98, 0.98},
Scaled@{1, 1, 1}, Scaled@{0, 1, 1}}, VertexColors -> vertex],
Polygon[{Scaled@{0.015, 0.98, 0.02}, Scaled@{0, 0.99, 0},
Scaled@{0, 1, 1}, Scaled@{0.015, 0.98, 0.98}},
VertexColors -> vertex],
Polygon[{Scaled@{0, 0.99, 0}, Scaled@{1, 1, 0}, Scaled@{1, 1, 1},
Scaled@{0, 1, 1}}, VertexColors -> vertex]
};
(* define some data of 4 dimensions: x, y, z height and top color *)
{m, n} = {10, 6};
data = Partition[Sort@Table[{RandomReal[], RandomReal[]}, {m*n}], n];
(* {z and top color position in data entries, horizontal and vertical gaps} *)
{z, top, hGap, vGap} = {1, 2, 0.075, 1/1000};
(* let's plot the whole thing *)
Graphics3D[
Join[{back},
Flatten@Table[{
Opacity@0.5, EdgeForm@None, FaceForm@Hue@data[[x, y, z]],
Cuboid[{y - .5 + hGap, x - .5 + hGap, 0}, {y + .5 - hGap,
x + .5 - hGap, data[[x, y, z]]}],(* bar *)
Opacity@1.0, EdgeForm@Black, FaceForm@Hue@data[[x, y, top]],
Cuboid[{y - .5 + hGap, x - .5 + hGap,
data[[x, y, 1]] + vGap}, {y + .5 - hGap, x + .5 - hGap,
data[[x, y, z]] + vGap}] (* top *)
}, {x, m}, {y, n}]]
,
BoxRatios -> 1, PlotRange -> All, Boxed -> False, Axes -> True
]

It might need some fiddling with axes, plot ranges and similar.
BarSpacing -> {0, 0}– Pschoofs Mar 22 '12 at 11:03