For small datasets just use the QuickOSM plugin, enter your
key=value and it will load the data directly as QGIS layer(s).
For big datasets don’t run massive queries on the Overpass API but use prepared thematic or regional OpenStreetMap extracts.
Don’t be scared of processing a global OSM planet file either, Osmium makes filtering OSM data extremely easy:
osmium tags-filter in.osm.pbf n/place=town -o place=town.osm.pbf
Yes, a planet file is pretty big, but extracting specific features from that is not a big data problem and you must not be scared of it. Downloading the file will probably take you magnitudes longer than extracting something from it. For me it was 45 minutes for the download, then about 8 minutes for extracting on a seriously slow (~60MB/s) spinning metal hard disk drive (no SSD).
And yes, you can load OSM PBF directly into QGIS thanks to GDAL’s support for the format.
While we are at it: Don’t use GeoJSON for anything but data transfer and maybe storage. It is not an efficient format to power your layers and GIS analyses. (OSM PDF isn’t either.)