Nie jestem pewien, czy dobrze zrozumiałem pytanie, ale moim zdaniem możesz tam nie podawać konkretnego typu. Wystarczy, że funkcja będzie zwracała void pointer. Taki wskaźnik można bez problemu zrzutować na dowolny inny typ, tylko musisz pamiętać, że rozmiar tablicy podajesz nie w ilości typu, tylko w bajtach, czyli jak chcesz zadeklarować tablicę int tabl[100], to wywołujesz mniejwięcej coś takiego:
int * tab = (int*)createTable(100 * sizeof(int));
gdzie createTable jest tak zadeklarowana:
void * createTable(int size);