По-перше багато речей можна робити за допомогою WinAPI. Треба просто посилати потрібні повідомлення та викликати функції. Приклади є в інтернеті. Мінуси цього варіанту у тому, що усе, чого не торкається WinAPI ви змінити не зможете. Тобто все, що не має стосунку до відображення на екрані та ще дещо.
По-друге для взаємодії з компонентами програми часто потрібно працювати з пам'яттю. Найпростіший приклад: ви хочете змінити текст в нащадку TGraphicControl. Для цього ви виділяєте пам'ять під рядок, і записуєте туди новий текст. Після цього ви якимось чином примушуєте контрол прочитати ваш рядок, скопіювати собі із нього текст і... після цього хтось має звільнити пам'ять з під непотрібного рядка. З нащадком TGraphicControl WinAPI вам не допоможе, але як тоді організувати роботу з пам'яттю? Зазвичай у таких випадках роблять так, щоб бібліотека могла підключитися до менеджера пам'яті основної програми. Після цього вона зможе досить вільно взаємодіяти з програмою, якщо скомпільована у тій же версії Делфі, за допомогою FindControl або RTTI.
Але найкращим варіантом взаємодії є третій: якщо програму скомпільовано з рантайм пакетами, то бібліотеку треба скомпілювати у тій же версії Делфі також з рантайм пакетами. Тоді бібліотека зможе робити з програмою взагалі усе що завгодно. Але програма має бути скомпільована з рантайм пакетами, а це трапляється рідко.
Усілякі спеціальні випадки типу наявності у програми скриптового двигуна, або спеціального АПІ для взаємодії, не розглядаємо, бо схоже, що це не ваш випадок.