alex1972, что за ocx и dll? Самописные или какого-нибудь вендора? Отвечаю по-порядку:
1. Местоположение файлов значение не имеет (точнее имеет непринципиальное значение), т.к. важна регистрация этих файлов в системе.
2. Регистрация нужна (см. пункт 1)
3. Регистрация таких файлов необходима, т.к. программа работает не с самими dll, ocx и т.п. а с "объектами" (COM, OLE и т.п.), предоставляющими определенный набор интерфейсов. Такие объекты в системе идентифицируются с помощью Глобальных Уникальных Идентификаторов
GUID (например, {6F9619FF-8B86-D011-B42D-00CF4FC964FF}), а сама реализация таких интерфейстов, располагается в тех самых файлах (ocx, dll и т.п.). Процесс регистрации заключается в сообщении операционной системе, что реализация интерфейстов, предоставляемых объектом с таким идентификатором, располагается в указанном файле (при этом также может регистрироваться "имя" объекта и его версия. Можешь посмотреть в реесте ветку HKEY_CLASSES_ROOT)
Регистрация освобождает различные приложения, которые могут использовать тот или иной объект от самостоятельного поиска нужных файлов, проверки версий (приложения проверяют версию объекта и набор интерфейстов через систему) и прочих неудобств. Как пример можно привести, возможность работы с объектами Microsoft Office и в самих офисных приложениях, и открытие этих документов в Internet Explorer (и других браузерах), а также экспорт различных данных в приложения MS Office (например, экспорт в Word распознанного текста в программе FineReader)
Исходя из всего вышесказанного, в системе может присутсвовать только ОДИН такой уникальный объект. Т.е. в твоей ситуации, если уже существуют такие файлы более новых версий, то 99,99% что требуемый объект в твоей системе уже присутвует (имена файлов, реализующие объект обычно не изменяют от версии к версии). И если ты зарегистрируешь файлы со старыми версиями ты потеряшь функциональность, предоставляемую объектом более поздней версии. И если одной программе требуется "новая" версия, а другой - именно "старая", то одна из них скорее всего работать не будет.
Хотя нормальные разработчики не завязываются именно на требуемую версию объекта. Главное обстоятельство - чтобы объект поддерживал требуемую функциональность, ну или на худой конец был не ниже какой-то версии, т.к. в более новых версиях обычно старая функциональность не убирается - может поменять ее реализаця, добавится что-то новое, но старое обычно остается для обеспечения обратной совместимости.