A quick take:
Something not exported in a public header -- and the comments in the R header files generally give you an idea
Because R Core reserves the right to change behavior of non-API functions. If nobody uses them ( in public packages), then upon a change in behavior no (public) packages break.
You don't get your package onto CRAN, and it may break.