Question: I've been writing in Java and C# for a while, but I'm having a hard time identifying places where using a custom annotation would be advantageous.

I can see that JUnit uses annotations in test classes to identify the order it should run the methods in the test classes, which obviates the need for a configuration of some sort. 

What are other examples of problems that annotations solve elegantly?

Answer: 
Depending on the annotations you use and how you run JUnit, JUnit scans the classpath and runs everything with the proper annotations (or, in the old school versions, that implemented a certain interface)

You're right in the sense that annotations are mostly useful for configuration - they're essentially metadata about the method/class. Here's an example from my work - for some reason I can't remember, we needed to dump objects to a log, but we wanted to filter some of attributes. We made a `Loggable` annotation that could be applied to individual getters or a class, we then used reflection to determine what to dump and what not to.

I would venture a guess that anything you can do with an annotation you could do with some sort of configuration file. Some annotations are basically formalized comments (e.g., @Deprecated). So the fact you can't come up with common cases isn't really surprising.
You can also add them as hints for static and run time code analysis tools. e.g. @ThreadSafe, @Immutable and so on. These give hints to the developer as to how the object should be treated/behave and the tooling can often give some level of confidence on that.