PayPal had a developer sandbox back in 2010 when I wrote our client code. Honestly I don't remember it being difficult or tricky. The worst aspect was their confusing documentation which tended to mix up various different services and APIs such that it was hard to figure out which was the current, appropriate one. Perhaps that was the Stripe advantage: a single obvious course of action to take.
One of my best upvoted stackoverflow answers is about a paypal sandbox bug (or "undocumented feature") where it would disregard the port in the pingback url.
Just generally the sandbox was horrible, it had a weird 'double login' system where it often got confused between whether you were 'inside' the sandbox logged in as a fake user or outside logged in as your paypal account.
And you're right about their woefully confusing documentation, it was definitely hard to understand which payment flow you were trying to use and which was appropriate.
I suspect also that the marketing folks re-branded the various services on a regular basis so you weren't even sure if two different names for something actually referred to the same thing.
PayPal tried to "modernize" their old crufty SOAP API with a REST-based API but ended up creating a separate half-functional, poorly documented, buggy layer on top of it that actually loses payments sometimes. I processed millions of payments through it and actually have their support people admitting the problems.
Their only hope is a reverse-takeover from Braintree. I'm not holding my breath; I've done my last PayPal integration. Forget all the "paypal will hold your money" concerns - the real problem is that they will loose your money in the wonky Rube Goldberg machine they've created to process payments.
In a series of calls with the top tier of support at Paypal, no one was able to even answer which API was the best to use. I was told not to use SOAP (or NVP), because they're ancient, not to use REST because it wasn't ready yet, and that the Braintree API around PayPal would never support the features we were trying to implement.