I'm not sure if it was ever intended to be a part of public API.

It's not documented, and its naming is misleading because it actually doesn't simulate a native event (oops!). It only simulates what React would do if it *received* that native event. It does that in a way that's very tightly coupled to the event system internals which is unfortunate. It is much better if we can educate people how to dispatch actual browser events in tests instead.

I think we should just deprecate it. We've removed most tests relying on it, and can leave a test or two until it can be deleted in the next major.
let eventType;
  for (eventType in eventNameDispatchConfigs) {
    /**
     * @param {!Element|ReactDOMComponent} domComponentOrNode
     * @param {?object} eventData Fake event data to use in SyntheticEvent.
     */
    Simulate[eventType] = makeSimulator(eventType);
  }
}
buildSimulators();
/**
 * Exports:
 *
 * - `SimulateNative.click(Element/ReactDOMComponent)`
 * - `SimulateNative.mouseMove(Element/ReactDOMComponent)`
 * - `SimulateNative.mouseIn/ReactDOMComponent)`
 * - `SimulateNative.mouseOut(Element/ReactDOMComponent)`
 * - ... (All keys from `BrowserEventConstants.topLevelTypes`)
 *
 * Note: Top level event types are a subset of the entire set of handler types
 * (which include a broader set of "synthetic" events). For example, onDragDone
 * is a synthetic event. Except when testing an event plugin or React's event
 * handling code specifically, you probably want to use Simulate
 * to dispatch synthetic events.
 */
function makeNativeSimulator(eventType, topLevelType) {