TikZ trees would probably be the way to go. However, things get pretty hairy fairly early on (example in Plain w/ XeTeX):
\input tikz
\font\figfont="Myriad Pro" at 8pt
\font\tinyfigfont="Myriad Pro" at 6pt
\usetikzlibrary{trees,shapes.geometric}
\tikzpicture[>=latex,font=\figfont,lbl/.style={draw=black,very thin,fill=#1,ellipse}]
\coordinate
child [grow=right] {
child {
child [grow=125] {
child [grow=left] {node {\tinyfigfont Cost of Transport} edge from parent[<-,thin]}
child {
child [grow=left] {node {\tinyfigfont Access to premises} edge from parent[<-,thin]}
child {node [lbl=yellow!20] {Transport}}
child [missing]
}
child [missing] edge from parent[<-,thick]
}
child [xshift=1cm] {
child [grow=125] {
child [grow=left] {node {\tinyfigfont Security} edge from parent[<-,thin]}
child {node [lbl=green!20!yellow] {Premises}}
child [missing] edge from parent[<-,thick]
}
child
child [grow=-125]
}
child [grow=-125] {
child [grow=left] {node {\tinyfigfont Consultation} edge from parent[<-,thin]}
child {node [lbl=purple!20] {Clients}}
child [missing] edge from parent[<-,thick]
}
}
};
\endtikzpicture
\bye

This could be improved upon a lot, but hopefully I could give you some idea.
TikZpackage. I am not aware of any packages that enable automated creation, however. – ipavlic Apr 19 '11 at 8:25