Symbol references work by using an inverted file index to compute the set of files that a symbol name appears in. It then uses the symbol navigation to refine each place the symbol appears and determine if it is a match to the symbol you selected. If it is not a symbol navigation match, then it is removed from the list of references. It does this using the same logic that symbol navigation uses to jump to a symbol. This logic involves evaluating the expression prefix, looking up the type of the symbol under the cursor, and determining the exact class or struct in play (to over-simplify the process). In the cases where we can't compute exact origin of a symbol, it falls back on logic that just matches the symbol by name. References will also fall back on that logic when refining the list of symbol instances that match.
As with anything, the results you get depend on the quality of the input you put in. If your source code is replete with preprocessing, side-effecting header files, and missing or duplicated header files, then you have to expect it to be difficult to parse.
Instead of making assumptions that the symbol navigation system doesn't work, use the fact that SlickEdit prompts you for which symbol to navigate to as an indication that your code is not being parsed correctly, and figure out what is non-standard about your code that trips up the parser.
95% of the time in C and C++ it's going to be preprocessing. Go to Document > C/C++ Options > C/C++ Preprocessing... to configure things to work around the problem. SlickEdit does not do full preprocessing of your source code (meaning, it does not follow #include files). We do it this way for performance, but also for simplicity. It's not as if following includes would solve everything, because you would still need to provide your include path, including compiler include paths and preprocessor defines, and the tagging would have to guess or skip includes and #if paths that are underspecified anyway.
95% of the time in Java, if things don't parse correctly, it's because you don't have everything you need tagged. You probably are using jar files, but you have neither the jar files nor the source for the jar files tagged.
Hope this information helps. As usual, if all else fails, post an example.