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.
interactive
. E.g., function3-of-5
creates a buffer and sets up a major-mode --1-of-5
isinteractive
because that is what the author decided a user should launch to start the process --2of5
gathers the data to be inserted into the buffer that has not yet been created --4of5
inserts the data and does some other stuff --5of5
puts the finishing touches (e.g., overlays) and then displays the buffer in the proper window/frame. So, as you can see, only1of5
should beinteractive
.