Exposing `project_close()` and `project_load_file()` seems reasonable if they are needed.
The new API functions to access `ProjectPrefs` seem weird. For one, the doc-comments are not useful, and might as well just be `/***/` since they don't actual describe what the functions do at all, just what field of some private undocumented struct they access is called. Moreover, usually in Geany (for better or worse) we would expose the struct members directly to the API using doc-comments (and obviously moving the struct out of the `#ifdef GEANY_PRIVATE` guard).
I don't feel really strongly about accessor functions vs exposing the struct, but it would be cool to fix the doc-comments so they explain what the functions are for (I genuinely have no idea). Also if keeping the accessor functions or not, it might be useful to take the opportunity to name the functions/field something better since `project_session` as a boolean is not a very good name. Something like `is_project_session` or `project_session_deleted` or `dont_load_project_session` or whatever it's actually for would be better, IMO.