I think there are two issues: (1) How to get done what you want to get done?, and (2) Should you be doing what you want?
To answer the second question one would need to know the purpose for your graphic. For the first part another option is to use the BarChart
function:
SeedRandom[12345];
poisson = RandomVariate[PoissonDistribution[1], 500];
BarChart[Last[HistogramList[poisson]], BarSpacing -> 3,
ChartLabels -> Range[Min[poisson], Max[poisson]]]

It finally dawned on me: I think you want the binwidth parameter to be the width of the bar as opposed to a width of a "bin" that might encompass more than one value.
I know these forums are typically "how to do something" rather than "should I do this?" but I think for graphics (and statistical analyses) it's critical to know what is the kind of message to the viewer that's desired. For example, I'm just not seeing the need for separating the bars or even to have bars. Here is a DiscretePlot
:
DiscretePlot[Length[poisson] PDF[EmpiricalDistribution[poisson], s],
{s, 0, Max[poisson]}, AxesOrigin -> {-0.5, 0}]
