Hi G,
The second question is a good one.
A permanent stretch (such as using HistogramTransformation) results in an image that is in general non-linear (an input vs output curve, the transfer function, is not a line). You maintain a linear image if you do not touch the midtones and only adjust the white and black points. However, the autostretch algorithm, for example, is a non-linear transfer function that is the most common way to display a good fraction of the available brightness values in an image in a "pleasing" way. This is made concrete (permanently stretched) with HistrogramTransformation. So as to your #1 this is likely the preferred method for stretching a linear image (if that is what you meant to say).
The other question- as to the number of methods, deals with the fact there are different attributes of images that are affected by stretching. For example certain kinds of stretches (take ExponentialTransform via PIP) attempt to moderate the stretch in a way that dampens brightening the noise. Other stretches, say ArcSinhStretch, give a non-linear result that caters to chromatic attributes of an image. So the different ways of stretching an image deal with the fact that data have different attributes (noise, spatial structure, color, saturated/clipped values, quantinization issues...etc etc) that are affected. Interestingly the input data, therefore, can somewhat point the way towards which kinds of stretching algorithms are best.
This is a very high level answer (meaning no specifics)- but based on the questions..it seemed a good place to start.
-adam