For any custom Launcher/HomeScreen applications, the permission SET_PREFERRED_APPLICATIONS is needed to set itself as the Default HomeScreen.
PackageManager::addPreferredActivity().
I'm aware of the StackOverflow threads on this issue (example) and that such a permission is only granted to apps signed with the OEM/Google certificates.
GoLauncher manages to set itself as Default Home Screen app automagically. They seem to have obtained the SET_PREFERRED_APPLICATIONS permission too (see here for permission list).
How ? is the question.