typedef struct {
// 略
} S1;
typedef struct {
// 略
} S2;
S1 *sub(S1 *arg1, S1 *arg2);

だとして、こいつを
S2 (*sub2)(S2 *, S2 *) = (S2 (*)(S2 *, S2 *))sub;
ならありですかね?。