When you're writing Emacs Lisp code, or indeed any sort of code, one of the most important things is to divide your work clearly, so users and programmers both can see role of every function.
Interactive functions or commands are supposed to be invoked by user directly. They allow to use functionality you want to provide. You should not declare interactive functions that are not supposed to be user interface of your package, this is confusing and not only because of "contamination" of list of available commands in M-x for example, but on design level, which is more important.
Similarly, you could ask why Emacs Lisp programmers use this sort of convention:
<package-name>-<symbol> for public functions and
<package-name>--<symbol> for auxiliary, internal ones. Again, this helps to divide your program and make clearer purpose of every element.