As you say, 내 몸이 추한 is not a sentence.
내 몸이 추해요 is correct.
내 몸이 못생겨요 is not quite right though. It should be 내 몸이 못생겼어요 to have a similar meaning as 추해요.
There is a group of adjectives that should be in past/perfect form to represent the present state.
The reason is because they derive the "resultant" meaning of a verb's action, with the original verb in them.
(This is a similar concept as the past participle in English, such as "done", "gone", etc).
- 잘생기다 (be good-looking, from 생기다): 잘생긴 얼굴 <=> 못생긴 얼굴; 얼굴이 잘생겼다 <=> 얼굴이 못생겼다.
- 잘나다 (be good-looking, well-bred, from 나다): 잘난 사람 <=> 못난 사람; 사람이 잘났다 <=> 사람이 못났다.
- 잘되다 (become good, ends well, from 되다): 잘된 일 <=> 안된 일; 일이 잘됐다 <=> 일이 안됐다.
- 잘하다 (do good, fare well, from 하다): 잘한 행동 <=> 못한 행동; 행동을 잘했다 <=> 행동을 못했다.
So the "present" state of these words requires the "perfect" form of the verbs wen they're in the predicate position.
But he attributive form is still -ㄴ (못생긴), which is the usual adjectival ending (as distinct from the action verbs' adjectival form -는 (하는, 가는)).
In some cases, the present tense form for such adjectives don't make sense(못생긴다, 못난다 are not used).
In others, the present tense form means an ongoing state or a general phenomenon as opposed to a current state(안된다, 못한다).