Currently, the code in DB.Checkpoint requires some variables to be non-zero that are only set in !opts.ReadOnly conditionals in Open(). In theory it should definitely be possible (and easy) to do a checkpoint of a read-only Pebble instance. As part of this issue, any dependencies between the non-readonly code, and Checkpoint would need to be untangled.
Once this change is in, the db checkpoint tool could also stop creating a writable pebble instance.