(...)
See the admin guide. In OpenLDAP you add schema by modifying a schema
below cn=schema,cn=config, and you set 'olcAttributeTypes' rather than
'attributeTypes'.

Makes sense... Although the error message is extremely misleading :/

Yes, OpenLDAP could use an effort to improve error messages.

Ok, get it. It would be cool (tm) that OpenLDAP accepts direct
modifications of the schema through LDAP requests.

Eh? You can, that's why cn=config exists. Just set up some DN to
have write access to it. Normally a rootdn for database config.
It's just that you can't modify cn=subschema directly - then slapd
wouldn't know in which schema entry to store the attribute. Look at
ldapsearch ... -LLL -b cn=schema,cn=config -s one 1.1
which has one entry per schema file originally loaded into slapd.

In principle, one could modify cn=schema by using back-relay and a
slapo-rwm that maps "cn=schema" to the appropriate "cn=config" node, and
attributeTypes to olcAttributeTypes.