Q:

Point addition in NaCl/libsodium (Curve25519)

In NaCl and libsodium, the crypto_scalarmult function implements the operation $Q = kP$ (scalar/point multiplication). There doesn't seem to be a function for point addition $K = P + Q$ though.
Something like point addition must be implemented somewhere I think, as part of the implementation of scalar multiplication. It would be useful to be able to access this for developing some protocols on top of Curve25519.

Is it deliberate that point addition isn't mentioned anywhere in the API or documentation? (Don't the authors want people implementing research-level protocols using their library?)
crypto_scalarmult delegates to crypto_scalarmult_curve25519 declared (in libsodium) in crypto_scalarmult_curve25519.h but I can't seem to find the definition in a .c file anywhere (in the latest version on GitHub)?
Is there a safe way to implement, or reuse an internal implementation, of point addition in libsodium?

A:

Is it deliberate that point addition isn't mentioned anywhere in the API or documentation?

Yes. The idea is to offer a minimal API that makes doing the right thing for security easy, while avoiding low level operations that allow shooting yourself in the foot.
To quote this primer (pdf) on NaCl:

A typical cryptographic library is a
  collection of many different functions
  and supports a plethora of parameter
  sets. It is left to the software developer
  to choose from these functions and
  parameters, and combine them in a way
  that offers the desired security. These
  choices come with various pitfalls, not
  only because most libraries still contain
  highly insecure functions for ‘historical’
  or ‘compatibility’ reasons, but also
  because it is easy to combine secure
  functions in an insecure way
The Eindhoven researchers have
  found that this level of complication is
  unnecessary for most applications. NaCl
  offers an easy-to-use high-level interface
  for exactly what applications need:
  secure authenticated encryption.

Is there a safe way to implement, or reuse an internal implementation, of point addition in libsodium?

You shouldn't even try to reuse the internal implementation by calling it from outside, because it's not a public interface. You can, of course, copy parts of the implementation (it's under the ISC license) and modify it to use in your own software, but then you are on your own with respect to using it safely.

