Record player movement and animation and replay it upon death to view all attempts (in the vein of Super Meat Boy). It's easy to implement and a fun addition to any challenging game. While this example comes packaged as a platformer, this can be easily extended to work in nearly any type of game genre.
Limit the duration of the recordings as well as the number of ghosts visible at once. Best of all, all ghosts are contained within one object so performance doesn't deteriorate with many replays.
Note: only the player is recorded, not the effects it had on the environment - to go about that, simply analyze the code in the player object and replicate it with others.
Also note: this example displays the ghosts alongside the active player. This can be disabled by adding a simple "if" statement to check if the player has completed the level, and only then should the ghosts be rendered.