A um ano atrás fiz um trabalho pra faculdade usando o DB4o, e para as suas perguntas minhas respostas. Não quer dizer que seja as unicas opções, na época foi a unica que eu tinha encontrado, talvez alguma coisa tenha mudado de lá pra cá, eu não cheguei a utilizado recentemente.
1 - Fazer na mão, antes de excluir uma venda, excluir primeiro o item da venda.
2 - Fazer na mão, antes de incluir um registro, primeiro verifica se já não existe uma pessoa com esse cpf, caso tenha atualiza, ou lança uma exceção, senão insere.
3 - Por debaixo dos panos o DB4o cria um id (UUID) pra vc, mais ele não é exposto, quando eu fiz o trabalho eu não precisava de um id sequencial (1,2,3, …) para cada classe(tabela), então eu usei a classe java.util.UUID que gera um id unico (String) para cada objeto persistido, é o mesmo que o DB4o faz, a diferença que ele não expõe esse id gerado.
Espero ter ajudado.