The last split package issue that we have between server and lucene is LazySoftDeletesDirectoryReaderWrapper. This was added early in 2021, so not one of the legacy hangovers from years gone by.

By inspecting the code, the three package-private member dependencies in `org.apache.lucene.index` become clear:
1. access to field SegmentReader.isNRT, 
2. CacheKey::new, and 
3. PendingSoftDeletes::applySoftDeletes.

First, LazySoftDeletesDirectoryReaderWrapper is only useful for read-only indices that are lazily loaded (a.k.a. frozen tier), so it  is doubtful that Lucene would find it generally useful.

A note on each of the specific package-private API points:
1. Access to field SegmentReader.isNRT is only for assertion code, and exposing an accessor from Lucene for this seems like it could be reasonable.
2. The CacheKey constructor is deliberately non-accessible from outside the package. There were past issues where problems arose with short-lived reader wrappers that would not reuse caches across queries. Maybe there's a way to make DelegatingCacheHelper only work with a DirectoryReader, since directory readers would generally not be short-lived. Or otherwise exposing DelegatingCacheHelper as a more generally useful API in Lucene itself.
3. For PendingSoftDeletes::applySoftDeletes one possibility is to just duplicate the code in ES. There are additional package-private issues when this is attempted, but maybe they are more straightforward to resolve.

[ the above notes are a summary of a discussion that included @romseygeek @jpountz, and @ywelsch ]

see #78166
test/framework/src/main/java/org/elasticsearch/index/engine/EngineTestCase.java
/*
 * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
 * or more contributor license agreements. Licensed under the Elastic License
 * 2.0 and the Server Side Public License, v 1; you may not use this file except
 * in compliance with, at your election, the Elastic License 2.0 or the Server
 * Side Public License, v 1.
 */
package org.elasticsearch.index.engine;
import org.apache.logging.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.codecs.Codec;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.FilterCodecReader;
import org.apache.lucene.index.FilterDirectoryReader;