Transporting development objects is much about bringing your objects across the available systems, how about removing such an object. It's a common misunderstanding that deleting a report cannot be transported. After all: when you delete a program the object to be transported is no longer available. But of course a program can be deleted...
And programs (or includes, function modules, classes, module pools) that are no longer in use should be removed (or at least disabled). How does it work ? Simply delete the program on your development system. You will be prompted for a change request which will record the action "delete program". This action is then transported accross the system landscape removing the program on every system.
Still unsure about deleting programs ? Just check the transport log for the program you have just deleted. Every program has it's versions, cross-reference tables (e.g. for includes) and a whole heap of related administration - which is also discarded of when a program is deleted. Think of it this way: a program that is no longer needed is like a garbage bag. It may not be in anyone's way now, but sooner rather than later some fellow developer is going to wonder what to do with your program. When upgrades are done, developers will put effort in even finding out whether your unused program should be upgraded as well. Keep it simple, keep it clean. Remove old programs.
Not convinced ? What if someone keeps using the unwanted program ? It may do updates that are no longer relevant or it may show reporting results that should no longer be in use. What exactly is the advantage of hanging on to an old program ? Have you ever reused an ABAP after it was taken out ? Well, if you do value the re-use advantage, simply copy the program to a $TMP program which will be available for re-use on the development client only.