What are the technical limitations of the self-amending ledger? Eg. what can't be amended via protocol updates with the on-chain governance mechanism?
The goal is to narrow down the as much as possible what can be upgraded to the parts which require agreement between all the participants. This is referred to as the "economic protocol". Fundamentally, the economic protocol decides which blocks are valid and which aren't, and provides a scoring function that determines the canonical chain among several alternatives.
Other aspects aren't amendable via on-chain governance because they can be amended directly by the user. For instance, the peer to peer layer and the gossip networks could be altered without affecting the validity of the chain so long as some nodes can gossip messages from one network to another. Likewise, the specifics of storing data do not directly affect the validity of the chain.
There are however a few things that are not amendable via the on-chain governance model but that would still require mass coordination to change. A few notable examples:
changing the way hashes of the context tree are computed. The current model assumes as git like hash tree (with blake2b instead of sha-1), but that calculation happens outside of the economic protocol.
changing the interface between the node and the shell. We may want at times a richer interface between the node and the shell. For instance, the node could decide to export a function that validates candidate blocks, a concept useful for some BFT like algorithms.
changing the standard library that the economic protocol can access. While, in theory, any standard library can be reimplemented from within the protocol, it may be more convenient to look to an external library, in which case node operators would need to coordinate to install that library.