My favourite example of a well-design C API is GTK+ which uses method #2 that you describe.
Although another advantage of your method #1 is not just that you could allocate the object on the stack, but also that you could reuse the same instance multiple times. If that's not going to be a common use case, then the simplicity of #2 is probably an advantage.
Of course, that's just my opinion :)