Какие практики популярны при создании Lite & Pro версии приложения?
можно розделить на две версии вот так (в build.gradle)productFlavors {
        PRO {
            applicationId "com.app.pro"
        }
        LITE {
            applicationId "com.app.lite"
        }
    }
и тогда в lite - держать обрезанную версию классов, а в pro дописывать в классы функционал.
Вот более развернутый пример для различных приложений (на выходе два APK, два приложения в маркете):android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        //vectorDrawables.useSupportLibrary = true
    }

    signingConfigs {
        debug {
            storeFile file('***\\debug.keystore')
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storePassword 'android'
        }
    }

    productFlavors {

        pro {
            applicationId = "com.example.pro" as ProductFlavor
            applicationId 'com.example.pro'
            buildConfigField "boolean", "pro", 'true'

            ***

        }
        lite {
            applicationId = "com.example.lite" as ProductFlavor
            applicationId 'com.example.lite'
            buildConfigField "boolean", "pro", 'false'
            
            ***
        }
    }
    buildTypes {

        debug {

            buildConfigField "boolean", "debugBuild", 'true'

            ***
        }

        release {

            buildConfigField "boolean", "debugBuild", 'false'

            ***
        }

    }
}
Но порекомендую все же использовать IAP разблокировку (встроенные покупки) и глобальный ключик pro, по которому вкл/откл рекламу и функционал.
Во всяком случае - сразу используйте полноценные классы, никаких последующих сравнений/слияний. Плавали, знаем - извращение еще то.