The original code is 9 lines, and it's very clear what it does.
Now you have a 'build_url' method, which is a bad name to start with. It's actually a 'build_def_request_url' or something like that.
Imagine you add another method find_synonyms(word). My quick brain would think I can use that same build_url() method. Wrong, because one needs a build_def_request_url() and the other a build_synonyms_request_url().
Let's say I need to debug and need to see what url it's calling. In the original code it's right there, here I have to on a goose chase to find my answer. One thing that wasn't refactored is putting the hardcoded url into a constant. That one I would do.
Another complexity is adapting one of the helper functions. If I adapt it, which callers could I break? Who is using this function?
Another part is that I would rewrite the pluck_definition(data) to a more generic get_value(data, u'Definition'). That way my other potential find_synonyms() could also use it, and it basically adds no extra lines of code except for an extra parameter.
I know this is an easy example to explain things, but the original code needs to be way more complex to justify it splitting up into multiple functions, that in this case can serve nothing else but that original function.
Just my feeling towards this code.