Re 1: физические адреса не играют никакой роли, здесь задействовано только виртуальная память. Физический адрес устанавливается только тогда, когда страница виртуальной памяти отображается в ОЗУ, вызванную ошибкой страницы. Многие базовые библиотеки DLL появляются по одному и тому же адресу виртуальной памяти в нескольких процессах, например kernel32.dll. Процессы просто используют одни и те же страницы кода (не данные).
Re 2: фактической «загрузки» не происходит, используется та же функция, которая поддерживает файлы, отображаемые в память. Основой этих страниц является сам файл DLL, а не файл подкачки. Ничего не загружается, пока сбой страницы не заставит Windows прочитать страницу из файла в ОЗУ. Но да, весь раздел кода DLL отображается.
Re 3: да, это сработало бы. Но практически невозможно заставить его работать на практике, так как вам придется написать функции замены для all , которые user32 экспортирует в вашу программу. В том числе те, которые используют другие функции Win32, вы не можете знать. Перехват API - это типичная используемая методика, Detours от Microsoft Labs хорош.
Windows Internals edition 5 - отличная книга, чтобы узнать больше о сантехнике.