This test BarChart is generated by the code that follows it:
data = Table[RandomInteger[{1, 10}], {3}, {4}];
BarChart[MapThread[Labeled[#1, #2, Above] &, {data, {1, 2, 3}}],
ChartLayout -> "Stacked",
ChartStyle ->
Reverse@{Lighter@Blue, Blue, Darker@Blue, Darker@Darker@Blue},
ChartLabels -> {{"a", "b", "c"}, None},
Frame -> {False, True, False, False},
FrameLabel -> {"x axis", "y axis"},
BaseStyle -> {FontFamily -> "Helvetica", FontSize -> 14}]
Since only a y-axis component of Frame is rendered: Frame -> {False, True, False, False}
the "x axis" label of FrameLabel -> {"x axis", "y axis"} is omitted - and that's consistent with documentation.
Is it possible to display "x axis" at the location it would be if the bottom component of the Frame were there and preserving the set BaseStyle values (eg Font, FontSize)?
This can be done using Inset but positioning is ad-hoc and it does not preserve BaseStyle values.
Wrapping Labeled around Barchart doesn't correctly center the text and moreover does not use the BaseStyle values, as the following screenshot shows. Here for comparison the bottom component of Frame is True - and note the disastrous clash of graphical elements.

Finally, using the bottom Frame component: Frame -> {True, True, False, False} but without ticks: FrameTicks -> {None, Automatic, None, None} results in an ugly double axis and overlap in labels:

Any other options, eg using LabelingFunction?
