We've had a few issues (being the most recent) where people have had trouble creating Geofield data programmatically. I suspect part of the issue is that on the field level, we expect an array of data that can be confusing to recreate. Geofield currently builds this data in the geofield_element_validate(), which handles all of our current widget needs, but leaves outside developers in the cold. :-(
We should move some of our processing code from geofield_element_validate() into geofield_field_presave(), so that we can auto-calculate data at the field level, which should allow us to require less data from developers.
Initially, I'm picturing that $items should either be an array with an 'input_format' item and a 'value' item, or just a raw string. If it's the array, then 'input_format' helps us decide how to process the data in value. If it's a raw string, then we try to decide if it's WKT, GeoJSON, etc. I'm definitely open to input here.
Credit goes to @phayes for the beginnings of this idea. I can't find the issue offhand where he first suggested something like this, but we should implement it anyway... :-)