The purpose of a dynamic pick list is to allow you to make modifications to the list with as little impact as possible. Static list are effective for data that doesn't change often. For list values that need updating, a dynamic pick list is the trick. In addition, you could use the same technique to pull data from external systems and make available in the list.
The method I'll describe is pretty well known ( see www.stunnware.com as well). I thought it'd be good to revisit and put it up on the blog.
This method uses a custom entity to hold the values for the picklist and JScript to load the values into the picklist when the form loads. The JScript will query the data using the CRM web services. You could just as easily call into other web services that return data from external systems or have the custom entity that holds the data get update externally as well.
Read more at the Microsoft Dynamics CRM Online Team blog.