Hi @lugash, I imagine that any library that wraps Geckoboard's custom widgets provide convenience over the subtle API differences in the widget body formats. Datasets, however, all expect the same format, so it is fairly simple to wrap it, even with PHP's curl like you say. I don't know if you're familiar with JS, but here's a small wrapper I made for datasets: https://github.com/jasonmendes/tuko/blob/master/index.js which may be much more verbose than it would be in PHP, as there I'm using Node's 'raw' https library.
As for which to choose, the Datasets platform is much more flexible! For custom widgets, you push up data exactly as it must match for the visualization, and you must do this for every visualization (widget) that you want.
For Datasets, you can create as many visualizations as you want from a single dataset. The data body is more generalized against a schema, and so in the Geckoboard UI/app you can select the visualization type, apply filters, and otherwise very easily fine tune what you'd like to display, without needing to change the underlying data.
You can try Datasets right away, actually! Just click Add widget > Datasets, and you should have available the demo dataset, called 'geckoboard.space.cargo'.
I hope this helps! Let me know if you'd like me to clarify anything further