Dovresti riorganizzare il codice...
Ci sono altri problemi: ad esempio lo 0 finale è un elemento della tua sequenza, non ha senso che il cast nel return, sarebbe meglio passare le dimensioni esplicitamente, ...

Riorganizziamo un po' le cose:
codice:
/* Prendere in input vettore di 27 numeri e dare come risultato 1 se la  * sequenza di numeri è perfetta, 0 se non lo è */


#include <stdio.h>
#include <stdlib.h>


int isPerfect (int *seq, int size) {
	int isperfect = 0, i;
    for(i = 0; i < size; i++)
      /*...*/;
    return isperfect;
}




int main()
{
    int i=0,*seq=NULL,n;
    printf("Inserisci 0 per terminare la sequenza\n");
    while(1) {
    	//Acquisisco
        printf("\nInserisci il %d numero: ",i+1);
        scanf("%d",&n);
        if(n==0)
        	break;
        //Inserisco valore nell'array
        seq=(int *)realloc(seq,(i+1)*sizeof(int));
        seq[i]=n;
        i++;
    }
    
    if (isPerfect(seq, i)==1)
    	printf("La sequenza di numeri è perfetta");
    else
    	printf("La sequenza di numeri non è perfetta");
    free(seq);
    return 0;
}