Most of that is still seamless since the goal of Codename One is completely different from those tools.
We are a write once run anywhere solution whereas they are a cross platform porting tool.
- an app which needs to have a drawer menu for Android but nothing for iOS
You can use things like theme overrides for stuff like this: https://www.codenameone.com/manual/advanced-theming.html#theme-layering-section
Specifically the drawer is something I would keep for both OS's in a Codename One design as it's currently not out of place for iOS apps.
Designs for iOS/Android are converging more and you can create apps that look very similar in some regards without them seeming alien.
- an app which uses top-level tab bar for Android and bottom tab bar for iOS
This is the default behavior for any Codename One app. That is because the themes derive from native theme behavior that defines these constants differently.
- an app which may access remote data from different server points for iOS and then for Android
You can use an if statement but I never personally ran into a case like that. You can use a native interface and store different URL's for different OS's and you can use native libraries for different OS's.
A few webservices needed to know which OS they were working with but those were mostly as an argument to a URL not as a whole different URL.
You need to disconnect from the perception of these other tools when working with Codename One.