Devi allocare dinamicamente l'array e poi restituire indirizzo e dimensione.
codice:
Prodotto *inserimento(int *dim){
	int i = 0;
	char buffer[MAXN];
	float b;
	printf("Quanti nuovi prodotti vuoi inserire?\n");
	scanf("%d", dim);
	Prodotto *p = (Prodotto *)sizeof((Prodotto)*(*dim));
	while(i<(*dim)){
		printf("\nId prodotto: ");
		scanf("%s", buffer);
		p[i].id_prodotto = calloc(strlen(buffer)+1, sizeof(char));
		strcpy(p[i].id_prodotto, buffer);
		printf("\nNome: ");
		scanf("%s", buffer);
		p[i].nome = calloc(strlen(buffer)+1, sizeof(char));
		strcpy(p[i].nome, buffer);
		printf("\nPrezzo: ");
		scanf("%f", &b);
		p[i].prezzo = calloc(1, sizeof(float));
		*p[i].prezzo = b;
		i++;
	}
	return p;
}

//nel main
int nprodotti;
Prodotto *p = inserimento(&nprodotti);
Attenzione che le definizioni di funzione vanno fuori dal main...