This idea & request has come up before, and at least a few times been seriously proposed as a feature for Arduino.
Publishing a single project meant to be used on a specific piece of hardware, you'd probably like to insulate yourself from unexpected changes in any of the libraries you're using. This could make it easier for people to compile your program, even if they don't already have the libraries you're using?
Or maybe you have other goals you'd like to achieve by this?
The really difficult part is the Arduino Team and creators of other boards like Teensy, and the authors of libraries have slightly different goals.
One major goal, which isn't achieved perfectly, is an API that's hardware independent. Functions like digitalWrite() and Wire.beginTransmission() are supposed to do the same thing on all boards, even though they have radically different GPIO register and I2C ports.
While I might like the idea of people publishing code tightly tied to only Teensy 3.1, the flip side of that coin is widespread use of such a feature would almost certainly result in lots of programs published, tightly tied to only specific hardware. Many would only work on STM32, or AVR based Arduino (and perhaps only specific boards), or only on Arduino Due.
Today many programs work or mostly work across different boards, and the cross-board compatibility situation is gradually improving. If hardware-specific libraries were packaged with programs, at least in terms of sharing of code between people with different hardware, it could be a huge step backwards.
Worse yet, what happens when PJRC makes some new version of Teensy, using a very similar chip. Often similar chips require only minor changes in the libraries. But if old copies of libraries are bundled up with programs, it could cause tremendous future compatibility troubles. With the current scheme, each hardware vendor has quite a lot of ability to solve compatibility issues.
Another huge concern is support. If you look over the last few days of threads in this forum, you'll see cases old versions of libraries had trouble with new versions of Arduino. Usually this is because something in the core library changed, and perhaps that would not be an issue if packaging also copied the core library (causing the above issues to be *much* worse), but sometimes troubles are also related to newer versions of the compiler or how Arduino does things. It's simply not always going to be practical for even a fully packaged set of code to always work the same on all future versions of the dev tools. Keeping libraries with the tools gives the me, the Arduino Team, and the authors of libraries the ability to resolve such issues. Packing old copies takes that ability away and makes supporting users who with to use incompatible programs much, much more work.
Perhaps there could be some way to achieve both set of goals, at least if not fully, much better than is done today. But simply packaging up all the source files is an idea that seems compelling in the context of more easily distributing a program to others, but could come with some really terrible long-term consequences to the entire platform. Very careful, forward looking design needs to be done, and that's quite challenging.