Question : Does NexGenRESOLV have a BSD-like API?

Yes. Both usual (e.g. gethostbyname()) and reentrant (e.g. gethostbyname_r()) BSD calls are provided by NexGenRESOLV.
NexGenRESOLV has also its own proprietary API for synchronous and asynchronous operations.

 Question : Does NexGenRESOLV support secundary DNS?

Yes. NexGenRESOLV will try to reach a secundary DNS (if any) if the primary server does not answer to several queries.
Secundary DNS can be configurated at both initialization time and runtime.

 Question : Does NexGenRESOLV support multiple queries?

Yes. However NexGenRESOLV must be initialized to do so: the application is in charge of choosing a sufficient amount of maximum simultaneous queries supported.

 Question : Does NexGenRESOLV have a cache?

Yes. NexGenRESOLV cache is transparent to application, except for the init phase (the application must configure the amount of memory allocated to the cache).
Cache entries remain in the cache as long as they are alive.

 Question : Is it possible not to use NexGenRESOLV cache?

Strictly speaking: no. NexGenRESOLV always require a cache to be configurated.
However you can reserve a very small amount of memory to it (to store at least 2 host entries), and you can always bypass a matching cache entry (e.g. forcing a reload of cache) to be sure to use up-to-date cache entries.

 Question : Is it possible to have an asynchronous resolution?

Yes. An API has been designed for that.
It requires the application to provide a callback, to get notified of the result of the name resolution.