Many European airports are built relatively close to the cities they serve. Airports in the US are (in general) further away, where an expansion is easier to do, e.g. Denver International Airport:
The distant location was chosen to avoid aircraft noise affecting developed areas, to accommodate a generous runway layout that would not be compromised by blizzards, and to allow for future expansion.
Heathrow on the other hand is old. It has such a long history that it has its own Wikipedia article (which ironically starts in 1410!). It started as a small airfield in the 1930s and it was in a very rural area at the time:
The land was at the time used for market gardening and wheat growing.
It was then greatly expanded as a military airport during World War II. After the war, the airport was turned into a civilian airport. The original runway layout way quite different compared to today, as the following image from the 1950s shows:
(image source: Wikimedia)
This image still shows the rural surroundings. But London expanded further and further and eventually the airport was fully surrounded:
Why was the land not reserved?
Because land in London is extremely valuable. The time after World War II saw the greatest expansion of London (size wise, not population wise):
The population peaked in 1940 at around 8.5 million, before declining and then rising recently to just over 8 million. Despite the decline and the devastation caused by the second world war, the 20th century saw the largest urban expansion in London’s history.
At the same time, other airports were expanded to serve the Greater London area: Gatwick was expanded during the 1950s, Luton in the 1960s and Stansted was converted to a civilian airport in 1966. With all of these airports available, there was no need to anticipate a large expansion of Heathrow. The land was much more valuable as an urban area.