In my point of view, JSS is pretty suite for your requirements. I've implemented something like you want with Xamarin. But I think it doesn't matter with which technology to do that because I didn't use any Xamarin Sitecore specific frameworks or tools. I only send simple HTTP requests to LayoutService.


> If user accessing the different-2 pages from mobile and in one of the page, one rendering having personalization based on Goal or User persona (Profile card) then Layout service will return personalized content for that page?

Yes, Layout Service returns the data with applied personalization rules. 

> How to push tracking data for personalization ( which cookies value needs to be set from app) from native mobile app?

Actually there are a few things that you need to take into account:

 - You need to pass "tracking=true" parameter for getting personalized results (`{YOUR_DOMAIN}/sitecore/api/layout/render/jss?item=/&sc_lang=en&tracking=true&sc_apikey={F3A7F3C9-0D0D-4F57-8D8A-5BFCAA4C349B}`)
 - You need to identify user if you want to get personalized results otherwise you will receive a content as for anonymous user

I added a web service with the following method to identify contact:

    public JsonResult Identify(string email)
        {
            if (email == null) throw new ArgumentNullException(nameof(email));
            
            Tracker.Current.Session.IdentifyAs("identification-source-name", email);

            return Json(true, JsonRequestBehavior.AllowGet);
        }

Then I send a request to this method with contact identificator (email in my case) and it returns me `SC_ANALYTICS_GLOBAL_COOKIE` cookie. You need to pass this cookie with all requests to JSS. It allows you to retrieve personalized content for you contact.

The following method I've used for forgetting user in case I need to change context contact:

    public JsonResult ForgetCurrentContact()
        {
            if (Tracker.Current != null)
            {
                Tracker.Current.EndVisit(true);
            }
            
            HttpContext.Session.Abandon();

            return Json(true, JsonRequestBehavior.AllowGet);
        }