Those procedures can indeed be private, but this 'main' block that you are describing is not. I think I see the problem. You are thinking in terms of other languages where you have a main block and then procedures. Think object-oriented instead. The package is an object. It has methods. These methods can be externally exposed or internal only. You will be executing your one external method from somewhere else. This one external method then calls several internal methods.
The 'main' block in a package should be thought of as an instantiation method. It is run *once*, the first time that the package is loaded for a given session. It is used to initialize variables and the like, not to run code blocks. Put your main logic in a procedure. Declare that procedure in your header.

Hope this makes sense,

- Chris