There really is no difference and there is a huge difference. LOL.
<ion-header-bar> is a custom Ionic AngularJS directive When you put it in your HTML, AngularJS automatically parses and compiles a template that is predefined for that directive.
This is the HTML that directive generates automatically:
'<header class="bar bar-header" ng-transclude></header>' :
When you define it yourself with classes, you are basically doing the directive’s work for the app. However, some directives have other functionality that may not get inherited by just using the classes. So, generally it is best to use the directives.