Нет ничего рекурсивного в этом.
Ваша проблема в том, что определение mystruct неизвестно до конца определения структуры.
Попробуйте
typedef struct mystruct
{
void (*ExitFnPtr)(struct mystruct ms);
int a;
} mystruct;
struct mystruct
совпадает с mystruct
(вы просто набираете его), но известно в этот момент времени.
Вы также можете сделать объявление вперед, если вы не хотите изменить исходный код (хотя это не так читаемо, как указано выше:
typedef struct mystruct mystruct;
typedef struct mystruct
{
void (*ExitFnPtr)(mystruct ms);
int a;
} mystruct;