Braintree’s API, while REST underneath, is only supported at the library level and they have more languages supported for this reason than Stripe (Including mobile specific APIs). Obviously this makes it much easier to support newer, hipper languages with Stripe - just write your own wrapper to the REST API.
Most of the big features seem to be supported on both platforms, one off and reoccurring payments, token based transactions, etc.
There are some small differences such as, Stripe can send credit card details through AJAX to their servers so they are never sent to yours. Whereas Braintree uses Javascript encryption to do it, so the encrypted values are sent to your server. But I haven't seen anything that only Braintree supports yet.
Tradeoff with Stripe is that while you get a much simpler API, it (likely) will cost you more than Braintree depending on scale and what cards are commonly used.
The nice part of sending the data to your servers with client side encryption is that you can do validation before sending to the payment gateway. For example, if you want to ensure everyone enters a cardholder name, you can validate the non-encrypted fields before eating the cost of calling a payment gateway.
You can do some of these validations in javascript, but javascript is error-prone (firebug) and not as flexible (have access to a lot more data server side).