Here is the same code that will dynamically change the ticks as the sliders are moved. The key to making this work is to get rid of the Show[]. The DateListPlot must be in the Dynamic[] so it gets redrawn when the sliders change. Show[] seems to limit what can be redrawn and messes up the format of the ticks. I added a popup at the bottom for the number of ticks. This version (even if you delete the popup and fix the number of ticks) is much better than the previous one (above).
DynamicModule[{data, xmin, xmax, ymin, ymax, ticks, ticknum = 4, int,
w = 400, h = 30},
data = TimeSeries[FinancialData["IBM", "Jan. 1, 2004"]];
ymin = Min[data["Values"]];
ymax = Max[data["Values"]]; {xmin, xmax} = {data["FirstTime"],
data["LastTime"]};
int = {xmin, xmax};
ticks = (xmax - xmin)/5*Range[4] + xmin;
Column[{Dynamic[
DateListPlot[data, ImageSize -> w, Joined -> True,
FrameTicks -> {Automatic, {ticks, None}},
DateTicksFormat -> {"MonthNameShort", " ", "YearShort"},
GridLines -> Automatic, PlotRange -> {int, Automatic}]],
IntervalSlider[
Dynamic[int, {(int = #) &, (ticks = (int[[2]] -
int[[1]])/(ticknum + 1)*Range[ticknum] +
int[[1]]) &}], {xmin, xmax, 1}, ImageSize -> {400, 30},
MinIntervalSize -> 1],
DateListPlot[data, Frame -> False, Axes -> False,
ImageSize -> {w, h}, AspectRatio -> h/w, Joined -> True,
Epilog -> {Opacity[0.5], Orange,
Dynamic[Rectangle @@ Thread[{int, {ymin, ymax}}]]}],
Row[{"Number of Ticks: ",
PopupMenu[Dynamic[ticknum], Range[10]]}]}]]
The only downside of the version above is that if you change the number of ticks in the popup, it does not redraw the plot -- you must move (or just click on) a slider. If you want the popup to instantly change the graph, you must force a variable inside the plot Dynamic[DateListPlot[...]] to change (such as the variable ticks). I added a function to the popup dynamic that will run after selection to change the variable ticks. This forces the redraw and I believe it has the behavior you are looking for.
DynamicModule[{data, xmin, xmax, ymin, ymax, ticks, ticknum = 4, int,
w = 400, h = 30},
data = TimeSeries[FinancialData["IBM", "Jan. 1, 2004"]];
ymin = Min[data["Values"]];
ymax = Max[data["Values"]]; {xmin, xmax} = {data["FirstTime"],
data["LastTime"]};
int = {xmin, xmax};
ticks = (xmax - xmin)/5*Range[4] + xmin;
Column[{Dynamic[
DateListPlot[data, ImageSize -> w, Joined -> True,
FrameTicks -> {Automatic, {ticks, None}},
DateTicksFormat -> {"MonthNameShort", " ", "YearShort"},
GridLines -> Automatic, PlotRange -> {int, Automatic}]],
IntervalSlider[
Dynamic[int, {(int = #) &, (ticks = (int[[2]] -
int[[1]])/(ticknum + 1)*Range[ticknum] +
int[[1]]) &}], {xmin, xmax, 1}, ImageSize -> {400, 30},
MinIntervalSize -> 1],
DateListPlot[data, Frame -> False, Axes -> False,
ImageSize -> {w, h}, AspectRatio -> h/w, Joined -> True,
Epilog -> {Opacity[0.5], Orange,
Dynamic[Rectangle @@ Thread[{int, {ymin, ymax}}]]}],
Row[{"Number of Ticks: ",
PopupMenu[
Dynamic[ticknum, {(ticknum = #) &, (ticks = (int[[2]] -
int[[1]])/(ticknum + 1)*Range[ticknum] +
int[[1]]) &}], Range[10]]}]}]]