If your code will only be relevant to one project, use one package and multiple libraries. For instance, consider a tower defense game: there will be one package for the whole game, but multiple libraries each dealing with their own areas of concern (enemy lib, tower lib, etc.).
If your code will be relevant to multiple projects but only for your projects (and not the general public), split the code into multiple packages, use local or github pub dependencies, and do not publish them on Pub:
dependencies:
transmogrify:
path: /Users/me/transmogrify
See Pub Dependencies for more info.
Continuing the above tower defense example, this would be useful for something like a game studio splash/intro screen. You would want to reuse this across multiple games, but it is not useful for anyone but you.
Finally, if the code can be used for multiple projects, and is of interest to other developers, publish it as a Pub package. For instance, a game engine would be useful to other game developers.