Во втором случе можно такой хак зафигачить)
var p = new Promise(e=>e(1));
Object.defineProperty(p, 'then', {
get(){
delete p.then;
return; //первый раз возвращаем undefined и обманываем систему :)
},
enumerable: true,
configurable: true
})
new Promise(e=>e(p)).then(res => alert(res instanceof Promise) ); //возвращает промис :)
В первом случае тоже можно свою обёртку над стандартным промисом прилепить, которая state будет запоминать.
Но зачем?)
Вообще, имхо, слишком мудрите вы с этим.