If I were to use this method, I would need to build two versions of my DLL, one for D3D9 and D3D11. Additionally, I would need two versions of my executable, correct?
You need zero DLLs. You can statically link the rendering code instead of dynamically linking it.
You'd probably also want three executables: The main one is the "Launcher" that probably has an options menu and a launch game button. The launch game button kicks off one of the other two exes (D3D9 or D3D11) depending on the settings and what the PC supports.