Yeah, you should be able to use multiple areas for one player, that shouldn't be the issue.
I just did a test and it appears working. Did have to try a few things, so it wasn't 100% straight-forward, but it basically works. In my test I have a sprite (player) and a color rect (enemy). The parent objects shouldn't matter.
Just make an Area2D inside them somewhere (you need a separate area for each part of the player you want to support collision for) and then have a CollisionShape2D under the Area2D. You are fine using rectangle shapes for anything not for the player movement. Rectangles should be more optimized than capsules, though in practice maybe there is not a huge performance difference (though there could be depending on how many objects are in your game).
I never use the signal UI, I think writing stuff in code as it's easy for me to reason with. You can try my example with the code first, and if it works, translate that into the UI if you like that better. Anyhow, this is basically it:
onready var area = get_node("EnemyArea")
func _ready():
area.connect("area_entered", self, "handle_collision")
func handle_collision(var object):
print("Collided with ", object.get_name())
Notice I am calling connect on the area itself. It has to be on the right area.
And then on the player to enable or disable the attack shape:
onready var attack_shape = get_node("AttackArea/Shape")
func _ready():
attack_shape.disabled = true
func _physics_process(delta):
if Input.is_action_just_pressed("attack"):
attack_shape.disabled = false
if Input.is_action_just_released("attack"):
attack_shape.disabled = true
Hope that makes sense.