Stick with typedef. At the end of the day, it's typedef's job.
Return void* and the casting it.
Reconsider your software architecture. Perhaps you could share with us what you're trying to achieve and see if we can point you toward a better direction.