Entonces deberías de cambiar el como trabajan esas funciones.
El detalle esta en que no se deberia de llamar a main. Tendrias que tener una función que inicialize el tablero y deje todas las variajes como si nunca si hubiera jugado.
Por ejemplo para reinicializar el tablero
int main(){
bool entrar = true;
char tateti[3][3];
do {
for(int i = 0; i < 3;i++){
for(int j = 0; j < 3;j++){
tateti[i][j] = '1' + (i*3) + j;
}
}
//Inicilizar TATETI, Rellenar la Matriz etc...
//JUGAR
//Evaluar si el usuario quiere salir
if(something == other) {
entrar = false;
}
}while(entrar);
}
Asi en cada do el tablero estaria inicializado como la primera vez.
Tendrías que realizar algo similar para las otras variables
Saludos!