Additional design idea for #3
When possible, also provide the maximum size needed for mytype in the same .h file as mytype_to_string().
#define MYTYPE_TO_STRING_SIZE 256
Now the user can code accordingly.
char buf[MYTYPE_TO_STRING_SIZE];
puts(mytype_to_string(mt, buf, sizeof buf));