the following points are my personal point of view.
LaTeX3 want to separate into different layers. The core language is
expl3. So before the next layers can be achieved the basement must be
stable. However the points are not limited to the core language. It's
also useful for package authors
This introduction leads me to my points.
It is useful to separate internal and global functions.
+ The code is more readable and the user knows which functions can be
used or not.
+ The naming of auxiliary functions can be more natural
+ It's more object-oriented programming whereby some values will be
+ Specifying auxiliary functions for one special task make it easier to
find bugs (or features ;-) )
Of course I see some drawbacks which are more addressed to the LaTeX3 team.
- Long decision process which function is local and which one is global.
- Changes can lead to new bugs.
The global drawback is the time which must be regarded in the schedule.
However based on my small list and *own* opinion I think a clearer
separation is a useful extension.
As Paulo Cerada pointed out that it's quite common to see variables
starting with _ which denote encapsulation.
However I like a more clearer syntax like \i_foo_ whereby \i_ indicates
"internal". This is the same like \l_ for local and \g_ for global