Olha cara, tem varias coisas faltando e outras erradas, a variável "contador" tem que estar declarada como global para que o valor não se perca na recursão(nesse caso especifico), você não pode comparar uma string com um char desse forma ("Mensagem == Letra"), a iteração dentro da função recursiva também não faz sentido algum.Uma das coisas mais importantes na recursão é o caso base, é uma "condição" de parada para a função, nesse caso o '\0' no final da string, você ate colocou mas foi na parte comentada do código.O enunciado pede que o usuário digite uma palavra e uma letra 100 vezes uma de cada vez e que em cada chamada da função seja feita a contagem das letras
Enfim, eu fiz algumas modificações e deixei o mais próximo que o enunciado pede.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100
int cont = 0, i = 0;
int Contar_Letra (char Mensagem[], char Letra);
int main(){
char Mensagem[TAM], Letra;
int l = 0;
while(l<TAM){
printf("Digite a Mensagem: ");
gets(Mensagem);
printf("Digite a Letra: ");
scanf("%c",&Letra);
printf("Se repete: %i\n", Contar_Letra(Mensagem,Letra));
setbuf(stdin, NULL);
cont = 0;
i = 0;
l++;
}
return 0;
}
int Contar_Letra(char Mensagem[], char Letra){
if(Mensagem[i] == '\0')
return cont;
if(Mensagem[i] == Letra){
cont++;
}
i++;
Contar_Letra(Mensagem, Letra);
}