There is one excellent reason to write code within Maxima (either in
the Maxima language or in Lisp): to take advantage of Maxima's unique
core functionality, namely symbolic mathematics.
Then there are some less good reasons.
There is the convenience of coding arbitrary-precision (bigfloat) and
rational arithmetic in Maxima, where the syntax is identical to that
of integers/floats. (Though some other languages support operator
overloading, e.g. C++.)
There is the ease of interfacing to other Maxima and Lisp code. But it
is a great pity that it is not easier to interface to outside packages
in all our underlying Lisps (though I understand there has been
progress). Recoding things in Maxima/Lisp is a waste of time and
effort.
That said, even when the foreign function interfaces become available
on all platforms, and are reliable and easy to use, there is still the
issue of writing clean interfaces to their data types and functions.
For instance, R has a sophisticated system of data frames which it
would be nice to expose to the Maxima user but which corresponds to
nothing standard in Maxima. Even if R did the heavy lifting, we'd
still need Maxima-side routines for manipulating data frames in a
natural way.
-s