Here is an attempt to give a general definition of a distributed ledger, trying to encompass most existing forms of blockchains and distributed ledgers, making their (theoretical) properties and underlying assumptions explicit. We start with a long definition, following with a shorter summary. Comments and suggestions for improvement are more than welcome.

A long definition

A distributed ledger is a distributed data structure where a (fixed or unbounded) set of bookkeeping nodes (aka miners), interconnected by a peer-to-peer network, collectively maintain a global state without any form of centralised control.
Members can request individual bookkeeping nodes to execute transactions to update this global state on their behalf.
Often members need to authenticate, to verify whether they are authorised to execute that transaction.
Such a transaction is either processed (and thus ends up affecting the global state), or silently ignored (possibly with delay in the case of lazy distributed ledgers that do not have immediate transaction finality).
The bookkeeping nodes agree on the order in which these transactions are executed (whenever this order is relevant), and on their effect on the global state.
All transactions are public, and so is the global state (at least to the members of the distributed ledger, in case it is a private ledger).
The global state may record (some part of) the history of all transactions executed so far.
As long as a specified fraction of the bookkeeping nodes is honest and active, this record is correct, and consensus on the order of incoming transactions and their effect on the global state is (eventually) reached.
All members can verify that the global state corresponds to executing these transactions in the agreed order, when started in some known initial state.
The effect of a transaction on the global state is either determined by some fixed transaction semantics (in the case of e.g. the Bitcoin blockchain), or corresponds to calling a function specified by some ‘smart contract’ that specifies how the global state should be transformed.
In the latter case, the transaction may specify some parameters that serve as input to the contract.
Members may submit smart contracts to the ledger for execution by other members, by writing the code that modifies the global state of the ledger according to the programming model specified by the distributed ledger.

A shorter definition

A distributed ledger is a distributed data structure where a set of bookkeeping nodes, interconnected by a peer-to-peer network, collectively maintain a global state without any form of centralised control.
Authorised members can request individual bookkeeping nodes to execute transactions to update this global state on their behalf.
Such a transaction is either processed (and thus ends up affecting the global state), or silently ignored.
The bookkeeping nodes maintain consensus on the list of executed transactions and their effect on the global state, as long as a specified fraction of the bookkeeping nodes is honest and active.
The global state, which includes the history of all transactions performed on it, is public to all members.
The effect of a transaction on the global state is either determined by some fixed transaction semantics, or corresponds to calling a function specified by some ‘smart contract’ code that specifies how the global state should be transformed.