Как установить максимальную ширину JPanel, но чтобы высота оставалась свободной для роста?(Я не могу использовать prefferedSize по странной причине).
Используйте LayoutManagers. BoxLayout, GridBagLayout или другой макет позволит вам определить единственное направление роста панели.
BoxLayout
GridBagLayout
Одной из возможностей является использование MigLayout http://www.miglayout.com/ Там вы можете легко переопределить минимальный: предпочтительный: максимальный размер. И в основном все работает правильно.