Ah yes.  Isearch reads the keys you type, looks them up in `isearch-mode-map`, and invokes them **in the current buffer**.

Isearch does **not**, in spite of appearances, use the minibuffer.  It uses the echo area. That is, what you see there is actually *output* messages, including echoes of the characters you type.

This should do what you ask:

<!-- language: lang-el -->

    (defun mydelete ()
      "Delete the failed portion of the search string, or the last char if successful."
      (interactive)
      (with-isearch-suspended
          (setq isearch-new-string
                (substring
                 isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
                isearch-new-message
                (mapconcat 'isearch-text-char-description isearch-new-string ""))))

    (define-key isearch-mode-map (kbd "DEL") 'mydelete)

(BTW, your question says the `delete` character, but you wrote `DEL`, which is the backspace character.)