Dear Ian, maybe the following solution is of interest to you. I don't know how to do it using DynamicModule, so I used Manipulate instead.
opts = Association[
"a" -> {"dog", "cat", "horse"},
"b" -> {"car", "boat", "plane"},
"c" -> {"apple", "pear", "banana"}
];
Framed[Labeled[Column[
{Manipulate[opt2 = {};
Labeled[CheckboxBar[Dynamic@opt2, opts[opt1]],
Style["Select Options", Bold], Top],
{{opt1, "b", ""}, {"a", "b", "c"}, PopupMenu}, Paneled -> False],
Dynamic@opt2}], Style["Main Menu", Bold], Top],
Background -> LightBlue]