When used in a sub-clause, 다 at the end most commonly functions as a quoting suffix.
This usage is sometimes extended to clauses which contain independent and objective ideas rather than just concerning the case at hand. People might also adopt such a style for effect or out of habit, as in your example.
Very often, phrases containing such 다 translates to a "that ..." noun clause in English.
So, we might translated your sentences like these (with a slight exaggeration).
1. 이 가방은 디자인은 예쁘다만 너무 비싸다 => While it's true that it's got cute design, this bag's too expensive.
2. 이 가방은 디자인은 예쁘지만 너무 비싸다 => While its design is cute, this bag is too expensive.
Without 다 (#2), the clause sounds tightly connected to the main clause without any extra nuance, while with 다(#1), it sounds like a statement or thesis in its own right. So #2 is a no nonsense, to-the-point way of saying it, and #1 is a somewhat unnecessarily broad sounding way of saying the same thing.
Note that in cases involving a real quote, 다 cannot be omitted.
1. 싫다는 사람을 왜 억지로 데려와? Why bring someone forcefully who says they don't want to come?
2. 싫은 사람을 왜 억지로 데려와? (meaning is unclear)
Here, 다 makes the word a quoted phrase. 싫은 사람 without 다 sounds like "someone you don't like", which is completely different from "someone who says they don't want to ..." in #1.