Ti do un aiutino, volutamente non rispettante la traccia.
il codice è il tuo c'è solo una void in più:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define DIM 30
int trova_palindromo(const char string[], int i, int l);
void compatibilizza(char string[], int l);
int main()
{
    char stringa[DIM]={0};
    char stringa2[DIM]={0};
    int lunghezza=0;
    printf("\ninserisci una frase o una parola : ");
    scanf("%[^\n]s", stringa);
    lunghezza = strlen(stringa);
    // copio in stringa2 perché la modificherò
    // stringa, continuerà a contenere l'input originale
    strncpy(stringa2, stringa, DIM);
    compatibilizza(stringa2,lunghezza); // modifica stringa2
    printf("%s l=%d",stringa2,lunghezza); // per test
    printf("\n%d\n\n", trova_palindromo(stringa2, 0, lunghezza - 1));
    return 0;
}
int trova_palindromo(const char string[], int i, int l)
{
   if(string[i] != string[l])
        return 0;
   if(i >= l)
        return 1;
   return trova_palindromo(string, i + 1, l - 1);
}
void compatibilizza(char string[],int l)
{
   for (int i=0; i<l; i++)
   {
        if (isalpha(string[i]) || isdigit(string[i]))
            string[i]=tolower(string[i]); // i caratteri alfanumerici tutti minuscoli
        else
            string[i]=' '; // tutti i caratteri non alfanumerici come spazi
   }
}
Per fare in modo che il programma rispetti la traccia data, dovrai invece di sostituire la punteggiatura con gli spazi, eliminare la punteggiatura e gli spazi, formando una nuova stringa ricompattata, ricorda di aggiungere il terminatore....
Una volta scritta la routine, potresti pensare di inglobarla direttamente nella funzione ricorsiva trova_palindromo