A fairly simple way is to snap the events to a grid. It's fast enough that potentially you can do it dynamically.
You can snap the points by means of a few simple computations before creating the events. Decide on the grid's origin and mesh size, using the same coordinate system as the (X, Y) values you have. Let the origin have coordinates (Ox, Oy) and suppose its mesh is c (the distance between neighboring points along the grid's basic directions). Large values of c will create large clusters, at the cost of potentially moving some points large distances (up to c*Sqrt(1/2)). Exploit the flexibility to choose c by finding a value that accomplishes the tradeoff you want between positional accuracy on the map and simplicity.
Calculate
I = {(X - Ox)/c}
J = {(Y - Oy)/c}
Then compute
U = I * c + Ox
V = J * c + Oy.
The braces "{}" mean "round to the nearest whole number." (You could do these calculations in two steps, rather than four, but we will see below that I and J have additional uses.)
After completing the calculation, designate (U, V) as the event coordinates instead of (X, Y). That takes care of the clustering.
In addition you want to winnow the records so there is a single point marker for each unique value of (U, V). Accomplish this by summarizing on (U, V) and basing the point events on that summary. I recall that ArcGIS is limited to summaries on a single physical field. You can create a field corresponding to (U, V) for this purpose with a computation like
Id = I + 10000*J
The value of 10000 only needs to be larger than the total number of (invisible) rows covering your data in the grid.
The algorithms are proprietary but there are two basic concepts here. The centroid uses a center of gravity algorithm (there are many different ways to calculate this). The "inside" check box calculates a centroid but then moves the point inside if it falls outside as this is desirable in some cases.
At the ArcObjects level these approaches are defined as the Centroid and the Label Point. See the Centroid link for example images.
Best Answer
Each instance of geometry (esri.geometry.Geometry) has a method called getExtent() which returns the extent of the geometry (polygon in your example). esri.geometry.Extent has a method called getCenter() that returns a point.
So you could do something like:
You could alternatively calculate the centroids to polygons beforehand in ArcMap. Then host the layer which has a one-to-one relationship with the polygons.