As you say, you can use a staging table:
CREATE TABLE regions (
region_id INT NOT NULL AUTO_INCREMENT,
country_id INT NOT NULL,
state_id INT,
city_id INT,
PRIMARY KEY (region_id),
UNIQUE KEY (country_id, state_id, city_id)
CONSTRAINT FOREIGN KEY (country_id) REFERENCES countries (id),
CONSTRAINT FOREIGN KEY (country_id, state_id) REFERENCES states (country_id, id),
CONSTRAINT FOREIGN KEY ( state_id, city_id) REFERENCES cities ( state_id, id)
)
regions (, , ), NULL.