В чем прикол писать на С++ и Delphi, если можно писать на языке ассемблера, экономя память и несколько выигрывая в скорости, а главное контролируя каждый бит кода 
не могу представить для чего может понадобится чистый ассемблер,  бодяга ассемблера с делфи или с++ не считается)
Если нужен малый оверхед программы, жесткое ограничение аппаратных средств, патчи (кряки, анлокеры, расширители функционала для чужих программ).
Любое более-менее стандартное winapi ориентированное приложение пишется на ASM-е так же, как и на с или делфи.
;-----------------------------------------------------
; Функция замены подстроки в строке
;-----------------------------------------------------
; lpSrc - указатель на исходную строку
; lpDst - указатель на буфер для полученной строки
; lpPattern - указатель на заменяемую подстроку
; lpReplace - указатель на строку для замены
; dNum - количество замен (0 - заменить все)
;-----------------------------------------------------
proc    _replace lpSrc:DWORD, lpPattern:DWORD, lpReplace:DWORD,\
                 lpDst:DWORD, dNum:DWORD
        pusha
        ; Указатель на буфер-приемник
        mov     edx,[lpDst]
        ; Счетчик замен
        xor     ebx,ebx
        ; Исходная строка не пустая?
        mov     ecx,[lpSrc]
        cmp     byte [ecx],0
        jz      .loc_ret
        ; Заменяемая строка не пустая?
        mov     eax,[lpPattern]
        cmp     byte [eax],0
        jz      .loc_copy_all
.loc_scan:
        mov     esi,ecx
        mov     edi,[lpPattern]
        ; Исходная строка закончилась?
        cmp     byte [esi],0
        je      .loc_end_replace
@@:
        ; Строки совпали с паттерном?
        cmp     byte [edi],0
        je      .loc_move_replace
        ; Символ совпадает с
        lodsb
        ; Заменять все вхождения?
        cmp     [dNum],0
        je      .loc_skip_counter
        ; Уже заменили нужное количество?
        cmp     ebx,[dNum]
        je      .loc_move_one_char
.loc_skip_counter:
        cmp     al,byte [edi]
        jne     .loc_move_one_char
        inc     edi
        jmp     @b
.loc_move_replace:
        ; Увеличить счетчик замен
        inc     ebx
        mov     ecx,esi
        ; Записать заменяющую строку
        mov     esi,[lpReplace]
        mov     edi,edx
@@:
        lodsb
        or      al,al
        jz      .loc_scan
        stosb
        inc     edx
        jmp     @b
.loc_move_one_char:
        ; Скопировать один символ
        mov     al,byte [ecx]
        mov     byte [edx],al
        inc     edx
        inc     ecx
        jmp     .loc_scan
.loc_end_replace:
        ; Записать финальный 0 в строку
        mov     byte [edx],0
        jmp     .loc_ret
.loc_copy_all:
        ; Просто скопировать исходную строку
        mov     esi,[lpSrc]
        mov     edi,[lpDst]
@@:
        lodsb
        stosb
        or      al,al
        jnz     @b
.loc_ret:
        popa
        ret
endp
;---------------------------------------------
Языки высокого уровня дают разработчику абстракции в виде массивов, объединений, списков, структур, объектов, коллекций, векторов, шаблонов, прототипов, виртуальные и перегружаемые функции и многое-многое.
Есть также фреймворки, которые вносят свои абстракции поверх существующих, например jQuery. Писать на том же CoffeCup быстрее и удобнее, чем на чистом JS. Разрабатывать игры в Unity практичнее, чем пилить самому движок и геймплей.
Точно также язык кликермана предоставляет свои абстракции для анализа экрана и и управления клавиатурой и мышкой.
Никто не мешает тебе написать библиотечку (анализ экрана и управление вводом) для твоего рабочего языка и писать ботов на нём. С точки зрения эффективности, нужно использовать инструмент, который освоен на уровне, достаточном для выполнения поставленной задачи за необходимое количество человеко-часов.
Кликерман в большинстве ситуаций выигрывает в затратах на разработку бота.