You cannot remove major versions of the C++ runtime as any app that relies on that major version will fail but you could remove older patch versions. So in your case 12.0.40660 needs to stay but the other 12.0.* versions could be removed. Just be careful to leave both the x64 and x86 versions.
For .NET Framework the SDKs can be removed but the targeting packs need to stay. If you remove the SDK then you are likely to break the VS workload as well. SDKs are not backward compatible as they are simply a series of tools. Many apps that rely on SDK features use a path that includes the version of the SDK. Removing the SDK will break that. I would recommend that you use the VS installer to try and remove any SDKs that are installed that you don't want. If a workload relies on it then the installer will not let you remove it.
The targeting pack is what allows you to select that framework in VS. If you removed, say 4.6 then you would not be able to select it as a framework anymore. The fact that the runtime is the same is not relevant here. As with the SDKs I'd use the VS installer to try and remove any frameworks that you don't support anymore. However some will be required by workloads so if you remove them they may fail in VS.
For the Help Viewer 1.x and 2.x are different beasts so you need both. Personally I would leave them all.
The difference between Targeting Pack and Targeting Pack ENU is discussed here. The targeting pack allows you to target the framework in VS. The language pack contains the culture-specific resources for that version of the framework. You need both.