This actually all triggered a more interesting discussion than I initially expected.
To better understand what was actually strictly conforming to the VHDL standard (as, possibly, opposed to what many of us may assume, and as, sometimes, opposed to what tools vendors implement), I took the VHDL-2008 standard and read the part about processes ("11.3 Process statement"). I have read quite a few books on VHDL over the years, but I admit I never read the standard itself (whereas this is something I'm more used to with software programming languages.) Until now.
If a process sensitivity list appears following the reserved word process, then the process statement is
assumed to contain an implicit wait statement as the last statement of the process statement part; this implicit
wait statement is of the form
wait on sensitivity_list ;
More subtleties follow, but this is the basic concept. What that means is twofold: first, that a process is supposed to "wake up" only if at least one of the signals from the sensitivity list changes states (which I guess, most of us had learned), but also that a process will always "execute" at least once, since the implicit "wait" is at the end of the process. This part is - AFAIK - a lot less known.
When reading the standard further, you get to understand that MANY of the VHDL features were designed with only simulation in mind (it talks about how things are supposed to be simulated throughout the standard, but very little if at all about how things are supposed to be physically implemented.) I guess this has historical roots, but is IMHO a weakness of the language. This is, after all, a "hardware description language", not just a simulation language. Thing is, most of us more or less "know" what features are not "synthesizable", or at least we think we know. But if you strictly stick to the standard, actually most features of the language, even the basic ones we use all the time for synthesis, are not "synthesizable" per se strictly speaking, as their implementation is not clearly defined.
Back to the "process", as someone said, sensitivity lists, in the general case, are not necessarily synthesizable, even though there are many simple cases for which they are (and, as we already said, would be by inferring latches for omitted signals). Thinking about it with some hindsight, I personally think the "process" is a construct that is something more software-oriented than hardware-oriented. As there is the notion of "waking up" a process on some arbitrary condition, it is a very general construct that doesn't always map - at least easily - to a simple logic structure hardware-wise. The "process" is thus more a pure simulation construct than one to describe hardware. Yet we use it all the time to describe hardware. This is kind of a discrepancy from the language POV. But as I noted while reading the standard, I personally find it a bit ambiguous when it comes to actually describing hardware.
So that explains why synthesis tools usually take liberties? But strictly speaking, synthesis tools that just ignore sensitivity lists are NOT conforming to the standard.
Now as I expressed earlier, when using the language for digital design, it usually doesn't really matter. Back to sensitivity lists for instance, as I mentioned earlier, I've seen very few (if at all) designs (outside of just theoretical courses) in which some signals were voluntarily omitted from the sensitivity list. That's likely why VHDL-2008 introduced the "all" keyword - out of pragmatism.
To sum it up, sensitivity lists as a feature are a peculiarity of the language and are more than questionable for any practical use IMHO (outside of pure simulation), but that was a decision made a long time ago. The "all" keyword is a sign that this was acknowledged as a pecularity, but of course kept as is for backward compatibility reasons.
Now I better understand the whole idea, but I still recommend *against* voluntarily omitting signals in sensitivity lists, in the sense that would infer implicit latches. Not just because that wouldn't work when synthesized with many tools, but also because it makes code harder to understand IMHO.