Record a stage file in temporary working directory. This prevents failed builds to unpack downloaded files every time and should be easy to implement. Also introduce a new flag --start-clean or something similar that ignores stages. After unpacking files set the stage file in the temporary working to dir to 1 as an example.
It already does this by creating a hidden file for each ebuild phase. For example, the unpack phase creates a file named '.unpacked'. By default, emerge cleans all previous work before beginning. You can use FEATURES=keepwork to keep previous work, but this feature can cause problems, so it's recommended to disable it when you don't need it. You might also be interested in the ebuild(1) command, which doesn't clean automatically, so you don't need FEATURES=keepwork with that.
Do you think it will be possible to let some ebuilds that are not known to cause any problems to keepwork by default?
No, this kind of behavior is just too error-prone, so it's only useful when someone is intimately familiar with the consequences (like when an ebuild developer actively working on fixing a particular ebuild).