I have written a number of packages, some with more than 2000 lines, using modules exclusively. Since modules (and therefore packages) can contain other modules I find I can create just about any structure I want using this approach.
For example, I wrote and maintain a simulator for a certain feedback process. The main loop reads data, calculates a response and sets an actuator. The input and output devices are all coded as modules inside a package. Each module then has procedures and variables (properties) as needed to implement the functionality needed. In addition there are local procedures (hidden from the outside caller) and variables to implement and control certain operations needed in more than one place. Conceptually the main program looks like this (the package is called IPSim):
do while running
IPSim:-LockInAmplifier:-Read(...); # get data
<do some calculations>
IPSim:-Orbit:-Move(...); # set the actuator
IPSim:-Dither:-Set(...); # change a parameter of the loop
IPSim:-LockInAmplifier:-Set(...); # change parameters of the readout system
This is vastly simplified; the point is to illustrate that modules allow a highly structured approach to programming in Maple. I don't know what you want to do, but I would think modules and submodules should allow you to structure your code to your liking. Note that in principle a package can pull in others by means of the "using" construct although I tend to prefer using the long form in my packages to avoid polluting the name space.
The Maple Programming Guide has the necessary info and is esssential to learn how to do this.
Joe Riel makes the point to keep such code in separate text files. I do this as well (and I use his maplev Emacs mode), and for large packages this is the way to go. But that is a separate issue having more to do with limits of the Maple GUI as a programming environment than with the structure of your code as the whole package has to be within one execution group. For such projects I use a small Maple worksheet to read in the code and create and store the .mla file where Maple can find it (this sheet is then run each time I update the package code).
I hope this helps,