Hi,
Well, CrossOver is based on Wine, the open-source project. So, of course, the resources available from WineHQ are generally applicable to CrossOver, too.
Unfortunately, there aren't simple, step-by-step directions to getting a program to work better with Wine or CrossOver. Ideally, Wine would be a complete and compatible reimplementation of the Win32 API, but it's not there yet. If the Wine community had a clear list of areas of incompatibility, we'd fix them (modulo available developer time). 😉
The best strategy is probably to stick to the oldest APIs that you can tolerate coding to. The older APIs are the best supported, most thoroughly exercised, and thus most complete. Newer APIs may be unimplemented or incompletely implemented.
Beyond that, I'm afraid it comes down to the black art of debugging. You have an advantage over most ordinary Wine users in that your program isn't a black box to you, while typical Wine debugging does involve black boxes. Still, you have to test, see what doesn't work, try to identify which API has failed for your particular use case, and work around that limitation in Wine. (You could, of course, submit bug reports or even patches to Wine.) You also have the Wine source to look at, and stubs and/or FIXMEs in there may call out obviously related known-missing functionality.
You may gain some insight by collecting a diagnostic log and reading through that. Here's a list of debug logging channels used by Wine.