There are reasons that this is by design.
In all of these scenarios that were provided (twitter, downloading picture in IE), there are implications with these expectations. If any of these scenarios encountered some sort of error during the process, you would NEVER know. You go to send a tweet and immediately exit the app because you expect it to finish in the background. You form a natural expectation of this over time, and then eventually there will be one time where there is a network error and you will never know what happened. In these situations, consistency is more important. With the current design, it will function and behave the same way EVERY time and you will never be left guessing.
If you want the functionality you are all describing, you need to have a way to inform the user of errors that might be encountered. Therefore, you will need a full background agent to achieve this, which is currently available for developers to use. If you want to introduce advanced features like this in your app, you need to make sure you are covering EVERY scenario and requirement.
However, an app developer can STILL achieve the functionality you want using a BackgroundWorker thread. A BackgroundWorker thread is stopped when an app is tombstoned, not deactivated.