The way .NET runtime assembly resolution works, there is no way to specify redirecting to an assembly of a different name.
The problem is actually at a lower level of the .NET type system than the assembly name itself. Although it may seem that e.g. the BaseTool types are the same and only their placement (assembly) differs, that is not the case. A .NET type reference in its complete form consists not only of the full type name, but also contains the assembly name, including the public token (if any). So the BaseTool class in ESRI.ArcGIS.ADF is essentially a completely different type than BaseTool in ESRI.ArcGIS.ADF.Local. From the .NET viewpoint, there is no connection between them whatsoever, they are not interchangeable.
It is not exactly true that you are not changing anything in your code. Visual Studio will change your .csproj file to point to the particular assembly when you switch references. The reference then gets compiled in your assembly. Now, there are ways to fiddle with the assembly reference table inside an already compiled DLL, but that's a hack which brings more trouble than it's worth.
.NET has facilities for dealing with changes in type placement called type forwarding which is done via the TypeForwardedToAttribute, but it requires changes to the original assembly. The original assembly also needs to be present on the system alongside the new assembly, so this could not have been done in the case of ESRI.ArcGIS.ADF.
The assembly renaming is a breaking change and as such, any code dependent code will by definition break and needs to be updated accordingly. That being said, you will need two separate installers.