Is it possible to search for dead end roads (dead end for vehicles, not for pedestrian) first and then reduce the result by the roads that contain stairs at the dead end?
[out:json];
area[name="London"]->.a;
(
way(area.a)["highway"~"^(residential|living_street)$"]; /* ["end"="yes"] or ["dead_end"="yes"] doesn't work; */
way(area.a)["highway"="steps"];
);
(._;>;);
out;
Overpass API release 0.7.61 has a few new features to identify dead end nodes, see this wiki page for details.
[out:json];
area[name="London"]->.a;
way(area.a)["highway"~"^(residential|living_street)$"];
node(way_link:1);
way(bn)["highway"="steps"];
out geom;
Try this query in overpass turbo