In HTML5, the id attribute is a global attribute and can be specified on any element.
If you look through the Document Type Declaration for HTML4, you can find the elements which do not have %attrs; defined in their attribute list to indicate they do not support the id attribute. Those included are near the bottom in the "Document Head" section: HEAD, TITLE, BASE, META, STYLE, SCRIPT, and HTML.
Note that although the PARAM element does not include the %attrs; declaration in its attribute list, it does explicitly allow the id attribute itself in that list.
<!ATTLIST PARAM
id ID #IMPLIED -- document-wide unique id --
name CDATA #REQUIRED -- property name --
value CDATA #IMPLIED -- property value --
valuetype (DATA|REF|OBJECT) DATA -- How to interpret value --
type %ContentType; #IMPLIED -- content type for value
when valuetype=ref --
>