Это действительно зависит от API. Первое имеет преимущество в том, что пользователь может встраивать тип библиотеки в свои собственные структуры без какого-либо косвенного обращения, если это выгодно; с другой стороны, тип структуры должен быть полностью известен пользователю библиотеки, который делает любые изменения интерфейса, которые могут изменить двоичную совместимость.
Второй подход означает, что структура может быть неполного типа, непрозрачной для пользователя, поэтому пользователь не видит внутренности реализации. Двоичная совместимость гораздо проще поддерживать, но она может подразумевать дополнительное косвенное обращение и выделение памяти в некоторых ситуациях по сравнению с тем, что может быть возможно, если пользователь может контролировать распределение структуры.