In my experience, we have did this successfully. We written a wrapper for Appium Driver (we called as MobileDriver) and based on the platform we instantiate either the Android Driver or IOSDriver. The end user only gets the MobileDriver.
And moreover, we created two different annotations, @AndroidMobileElement and @IOSMobileElement similar to the PageObject pattern to initialize the locators. During runtime, based on the platform, it will load the required locator either from android or ios annotation.
With this approach, end user has to create one test script which can be executed on both android and iOS, provided both apps have the same flows. In case of different flows, user has to handle with some conditional statements.
We were successful with this approach.