I have a maximum of two versions at any one time, the "upcoming release" and the "currently being distributed release". If a bug or enhancement is deemed important enough (or feasible), code for both releases is updated, and a new build of the "currently being distributed release" is made available for download. If a user is more than one release out of date then it's time for them to upgrade because they will not be receiving any new builds for their old software.
There are about 7,500 users of my payment processing software and this somewhat informal method has worked OK for the last eight years.
Scott Ramey
BDS Software