Thanks for another helpful reply!
The points I'm displaying are not going to always be the same. They will be created dynamically from a search depending on what parameters the user selected right before the map is created. At the moment, they are coming into the browser as JSON. I've looked at the clustering example you sent as well as the code behind it and it seems to do most of what we want, and the code is actually based on reading a JSON file containing all the points. I'm unsure if selecting the points with drawing tools (squares, polygons, etc) would select all the points behind the clusters correctly. Would that still work?
The second option of creating a server sounds interesting. Does this create actual rendered images on the server end with the points flattened with the map imagery available as a tiled layer? That obviously would be very fast on the front end when you pan and zoom but I'm guessing that the functionality would be reduced, ie, you can't click or interact with the points? I'm not sure how this would work.
Say a user has put in a bunch of search parameters in our program, the server will then respond with a large JSON response containing all the points to be plotted. Our back end is Java based, so presumably I could create a new ArcDocument for each request in the back end and then consume that with the web api?