I mostly ‘care’ for the public interface, so it rather expose const char* than std::string. Internally it could do anything with whatever is fit to be comfortable etc. No way I'd recommend to change internals of a black box.
There's that weird difference between pragma and include callbacks declared next to each other.
Regarding the returning of vectors of strings for attributes values - there are different ways to make it ‘easier’ for C-interfaces to communicate.